首页 > 其他分享 >设置权限所需资源、封装权限信息

设置权限所需资源、封装权限信息

时间:2023-04-23 11:15:32浏览次数:36  
标签:return user 设置 LoginUser Override 封装 权限 public

设置权限所需资源

SpringSecurity为我们提供了基于注解的权限控制方案,这也是我们项目中主要采用的方式。我们可以使用注解去指定访问对应的资源所需的权限。

但是要使用它我们需要先开启相关配置。

@EnableGlobalMethodSecurity(prePostEnabled = true)

在SecurityConfig配置类上面添加此注解,开启配置。

@Configuration
@EnableGlobalMethodSecurity(prePostEnabled = true) // 开启相关配置
public class SecurityConfig extends WebSecurityConfigurerAdapter {

然后就可以使用对应的注解。@PreAuthorize

HelloController控制层

@RestController
public class HelloController {

    @RequestMapping("/hello")
    @PreAuthorize("hasAuthority('test')")
    public String hello() {
        return "hello";
    }

}

封装权限信息

我们前面在写UserDetailsServiceImpl时候说过,在查询用户后还要获取对应的权限信息,封装到UserDetails中返回。

我们先直接把权限信息写死封装到UserDetails中进行测试。

我们之前定义了UserDetails的实现类LoginUser,想要让其能封装权限信息就要对其进行修改。

LoginUser实现类

@Data
@NoArgsConstructor
public class LoginUser implements UserDetails {
 
    private User user;
        
    //存储权限信息
    private List<String> permissions;
    
    
    public LoginUser(User user,List<String> permissions) {
        this.user = user;
        this.permissions = permissions;
    }
 
 
    //存储SpringSecurity所需要的权限信息的集合
    @JSONField(serialize = false)
    private List<GrantedAuthority> authorities;
 
    @Override
    public  Collection<? extends GrantedAuthority> getAuthorities() {
        if(authorities!=null){
            return authorities;
        }
        //把permissions中字符串类型的权限信息转换成GrantedAuthority对象存入authorities中
        authorities = permissions.stream().
                map(SimpleGrantedAuthority::new)
                .collect(Collectors.toList());
        return authorities;
    }
 
    @Override
    public String getPassword() {
        return user.getPassword();
    }
 
    @Override
    public String getUsername() {
        return user.getUserName();
    }
 
    @Override
    public boolean isAccountNonExpired() {
        return true;
    }
 
    @Override
    public boolean isAccountNonLocked() {
        return true;
    }
 
    @Override
    public boolean isCredentialsNonExpired() {
        return true;
    }
 
    @Override
    public boolean isEnabled() {
        return true;
    }
}

LoginUser修改完后我们就可以在UserDetailsServiceImpl中去把权限信息封装到LoginUser中了。我们写死权限进行测试,后面我们再从数据库中查询权限信息。

UserDetailsServiceImpl实现类

@Service
public class UserDetailsServiceImpl implements UserDetailsService {
 
    @Autowired
    private UserMapper userMapper;
 
    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(User::getUserName,username);
        User user = userMapper.selectOne(wrapper);
        if(Objects.isNull(user)){
            throw new RuntimeException("用户名或密码错误");
        }
        //TODO 根据用户查询权限信息 添加到LoginUser中
        List<String> list = new ArrayList<>(Arrays.asList("test","admin"));
        return new LoginUser(user,list);
    }
}

修改JwtAuthenticationTokenFilter类

UsernamePasswordAuthenticationToken authenticationToken =
                new UsernamePasswordAuthenticationToken(loginUser, null, loginUser.getAuthorities());

标签:return,user,设置,LoginUser,Override,封装,权限,public
From: https://www.cnblogs.com/wsfj/p/17345865.html

相关文章

  • 信创操作系统--麒麟Kylin桌面版 (项目三 控制中心-账户类设置与个性化设置)
     账户类设置1 账户设置在安装系统时会创建一个账户,如图1-1所示。图1-1添加用户账户(1)单击【开始】菜单用户头像,弹出用户账户界面,如图1-2所示。图1-2(2)单击【+添加新用户】按钮,即可添加新用户账户,如图1-3所示。图1-3(3)单击【确认】按钮后,弹出授权界面,如图1-4所示。在【密码】输入框中......
  • Win10 资源管理器导航栏设置:显示库,删除6个文件夹和隐藏OneDrive
    如果你和我一样是刚刚从windows7升级到windows10的,我猜你也会发现资源管理器导航栏里略微恼人的变化:库文件不见了,我的电脑里出现了无法隐藏也无法删除的“我的音乐”之类文件(这一个页面里面显示两边也是醉了!),一个懒得使用的Onedrive占据一方。搞掉他!但是好像不是那么简单。花了点时......
  • 退出登录、认证配置详解、权限系统的作用、授权基本流程
    退出登录我们只需要定义一个登录接口,然后获取SecurityContextHolder中的认证信息,删除redis中对应的数据即可。LoginController控制层@RestControllerpublicclassLoginController{@AutowiredprivateLoginServiceloginService;@RequestMapping("/user/lo......
  • Vue设置默认加载页面,去掉地址栏#号
     {path:'/',component:Login,//想默认启动的页面},mode:"history"//去掉地址栏的#号 ......
  • 管理中心,管理员管理,及管理员权限设置
    管理员管理列表效果: 添加管理员效果:编辑管理员效果: 管理员权限设置: 管理员管理控制器:controllers/admins.go  vardb=common.DB//管理员列表funcAdminList(c*gin.Context){//获取列表users:=modes.AdminList(c)//获取管理员列表c.HT......
  • 一分钟夺回Windows系统权限
    Windows10总是替我们想得很周到,各种各样的安全设置,云里雾里感觉老安全了。可是,为什么我自己的电脑,权限反而不是自己的?!删除个文件还要权限?别管那么多,把我的电脑还给我!一分钟夺回Windows系统权限对“此电脑”右键选择“管理”进入管理设置:在“系统工具”的下拉菜单中找到“本......
  • mysql设置允许外部访问
    配置mysql允许外部进行登录访问;登录进入mysql;mysql-uroot-p输入密码进入,usermysql;selecthost,userfromuser; 3.更新user表中root用户域属性,’%'表示允许外部访问updateusersethost='%'whereuser='root'; 4.执行以上语句之后再执行:FLUSHPRIVILEGES; ......
  • Serieshe对象和Dataframe对象重新设置索引
    1.Series重新设置索引并用指定数字填充NaN: 2.Series向前填充和向后填充: 3.DataFrame重新设置行列索引: ......
  • 权限登录实现
    数据库校验用户​从之前的分析我们可以知道,我们可以自定义一个UserDetailsService,让SpringSecurity使用我们的UserDetailsService。我们自己的UserDetailsService可以从数据库中查询用户名和密码数据库CREATETABLE`sys_user`(`id`BIGINT(20)NOTNULLAUTO_INC......
  • 认证详细流程 权限登录思路
     Authentication接口:它的实现类,表示当前访问系统的用户,封装了用户相关信息。AuthenticationManager接口:定义了认证Authentication的方法UserDetailsService接口:加载用户特定数据的核心接口。里面定义了一个根据用户名查询用户信息的方法。UserDetails接口:提供核心用户信息......