Spring Security+Spring Boot 实现对用户权限控制访问特定权限内容(基于实战项目)
2019-03-08 18:12
567 查看
我重写了hasPermission并用此方法在控制器上校验用户权限
原创实战代码,如有问题和错误留言一起交流学习
话不多说
public class MyPermissionEvaluator implements PermissionEvaluator { @Resource private UsersServiceImpl usersService; @Override public boolean hasPermission(Authentication authentication,Object targetApplication,Object targetPermissions) { //获取当前登陆用户 LoginUserDetailsImpl user = (LoginUserDetailsImpl) authentication.getPrincipal(); if(user != null) { List<Permission> PermissionList = usersService.getPermission(user.getUsername()); //遍历一个用户的所有权限并且进行校验 for (Permission PermissionList1 :PermissionList) { if (targetPermissions.equals(PermissionList1.getPermission()) & targetApplication.equals(PermissionList1.getApplication()) ) { log.info("The user poccesses this permission!"); return true; } } } log.info("The user does not have this permission!"); return false; } @Override public boolean hasPermission(Authentication authentication, Serializable serializable, String s, Object o) { return false; } }
security配置
………… @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests() .antMatchers("/index.html","/login.html").permitAll() .anyRequest().authenticated() .and() .formLogin() .loginPage("/login.html") // 登录 .loginProcessingUrl("/auth/login") .failureUrl("/error.html").permitAll() .defaultSuccessUrl("/") .failureForwardUrl("/error.html") .and() .logout() .logoutUrl("/auth/logout") .invalidateHttpSession(true) .logoutSuccessUrl("/login.html"); http.csrf().disable(); } //注册我改写过的PermissionEvaluator类 public DefaultWebSecurityExpressionHandler webSecurityExpressionHandler(){ DefaultWebSecurityExpressionHandler defaultWebSecurityExpressionHandler = new DefaultWebSecurityExpressionHandler(); defaultWebSecurityExpressionHandler.setPermissionEvaluator(MyPermissionEvaluator); return defaultWebSecurityExpressionHandler; } public DefaultMethodSecurityExpressionHandler defaultMethodSecurityExpressionHandler(){ DefaultMethodSecurityExpressionHandler defaultMethodSecurityExpressionHandler = new DefaultMethodSecurityExpressionHandler(); defaultMethodSecurityExpressionHandler.setPermissionEvaluator(MyPermissionEvaluator); return defaultMethodSecurityExpressionHandler; }
关键来了,在Controller控制校验,一个小技巧处理
@RequestMapping(value = "/application/{id}",method = {RequestMethod.DELETE},produces="application/json;charset=UTF-8") @ResponseBody @PreAuthorize("hasPermission(#参数名(自己定义的1级权限),自己定义的2级权限)") //这里用#获取参数 public Object deleteApplication(@PathVariable Integer id,@RequestParam("参数名")参数名类型 参数名) { ApplicationMapper.deleteByPrimaryKey(id); return GlobalResponse.success(); }
到此就结束了,核心就是控制器中注解参数的获取,纠结了好几天,以为拿不到。
相关文章推荐
- SpringBoot整合Shiro实现基于角色的权限访问控制(RBAC)系统简单设计从零搭建
- springboot+springsecurity基于用户表-角色表-权限表的权限控制(三)
- SpringBoot+Spring Security+JWT实现RESTful Api权限控制的方法
- springboot+springsecurity+cas实现sso,并开启注解方法级别的权限控制
- 【总结】基于Spring LDAP和Spring Security的用户认证和权限控制Web实现
- spring实战-Spring-security实现用户权限认证登录
- angular JS 基于ionic框架 开发移动端项目 实现进入前台 判断用户权限 控制项目UI布局和tab的部门显示和隐藏
- spirng-boot中,基于既有的token验证方式,利用spring-security实现权限系统
- springboot+springsecurity+mybatis+thymeleaf实现用户登录和权限过程中的坑
- Spring Boot Security 基于角色的访问控制
- springboot-29-security(二)用户角色权限控制
- springboot-30-security(三)使用注解实现权限控制
- Spring Boot+Spring Security+JWT 实现 RESTful Api 权限控制
- 基于Eclipse Maven的Spring4/Spring-MVC/Hibernate4整合之十一:利用拦截器控制访问权限
- springmvc+spring+mybatis+maven项目集成shiro进行用户权限控制【转】
- Spring Boot集成Security使用数据库用户角色权限ROLE_问题
- 基于角色和资源的用户权限控制(用SpringMVC实现)
- springBoot admin 实现对springboot项目的监控-实战
- 在Spring Boot中使用Spring Security实现权限控制
- 基于SpringBoot + Mybatis实现SpringMVC Web项目