5.资源访问的权限控制
作者:互联网
我们在学习shiro的时候,知道有两个注解
@RequiresPermissions("user:ccc") @RequiresRoles("admin")
spring security也提供了类似的功能,它从两个方面来提供的 1配置 2注解
1.配置形式的提供
我们这边有两个需要访问的资源
@RestController public class AuthController { @GetMapping("/needAuth") public String needAuth(){ return "具有权限访问"; } @GetMapping("/needRole") public String needRole(){ return "具有角色访问"; } }
具体配置如下
protected void configure(HttpSecurity http) throws Exception { http.formLogin() //表单登录 .loginPage("/login.html") //登录页面 .loginProcessingUrl("/user/login") //登录访问路径,这个路径默认不需要认证 .defaultSuccessUrl("/").permitAll() //默认跳转路径,如果有指定路径,则它就可以忽略,这个测试结论是必须加,但是它没有默认效果,访问不存在的404,访问存在的就找真实地址,那它的默认意义又何在? .and().authorizeRequests() .antMatchers("/hello").permitAll() //设置哪些路径可以直接访问 permitAll这个不加还报错 //.antMatchers("/needAuth").hasAuthority("auth") //.antMatchers("/needAuth").hasAnyAuthority("auth","auth2") //.antMatchers("/needRole").hasRole("admin") .antMatchers("/needRole").hasAnyRole("admin","admin2") .anyRequest().authenticated() //剩下的请求都要认证.这个配置不加的话,所有路径都可以访问 .and().csrf().disable(); }
权限的设置如下
public UserDetails loadUserByUsername(String userName) throws UsernameNotFoundException { QueryWrapper<Users> queryWrapper = new QueryWrapper(); queryWrapper.eq("name",userName); Users user = usersMapper.selectOne(queryWrapper); if(user==null){ throw new UsernameNotFoundException("用户不存在"); } List<GrantedAuthority> list = AuthorityUtils.createAuthorityList("ROLE_admin","auth"); return new User(user.getName(),new BCryptPasswordEncoder().encode(user.getPassword()),list); }
分析一下:
1)两个角度,一个是权限角度Authority,一个是角色角度Role
2) 带有any的就是只要包含就能访问
3)role的处理比较特殊,在设置role的时候需要加上前缀ROLE_ 这是源码里面定义的
标签:needAuth,antMatchers,访问,user,new,权限,public,资源 来源: https://www.cnblogs.com/johnzhao/p/14527315.html