SpringSecurity权限控制实现原理解析

作者:天宇轩-王 时间:2022-04-05 14:46:27 

菜单控制:

SpringSecurity权限控制实现原理解析

SpringSecurity权限控制实现原理解析

可以用来判断这个用户是不是有这些角色,没有的话就不展示

SpringSecurity权限控制实现原理解析

SpringSecurity权限控制实现原理解析

数据控制:

由于数据都是从后端查的,在后端控制权限就可以了


<!--
   开启权限控制注解支持
   jsr250-annotations="enabled"表示支持jsr250-api的注解,需要jsr250-api的jar包
   pre-post-annotations="enabled"表示支持spring表达式注解
   secured-annotations="enabled"这才是SpringSecurity提供的注解
  -->
 <security:global-method-security jsr250-annotations="enabled"
                  pre-post-annotations="enabled"
                  secured-annotations="enabled"/>

注:这个要放在mvc的容器中,因为子容器可以访问到主容器,主容器访问不到子容器


/表示当前类中所有方法都需要ROLE_ADMIN或者ROLE_PRODUCT才能访问
@Controller
@RequestMapping("/product")
@RolesAllowed({"ROLE_ADMIN","ROLE_PRODUCT"})//JSR-250注解
public class ProductController {
@RequestMapping("/findAll")
public String findAll(){
return "product-list";
}
}
//表示当前类中findAll方法需要ROLE_ADMIN或者ROLE_PRODUCT才能访问
@Controller
@RequestMapping("/product")
public class ProductController {
@RequestMapping("/findAll")
@PreAuthorize("hasAnyRole('ROLE_ADMIN','ROLE_PRODUCT')")//spring表达式注解
public String findAll(){
return "product-list";
}
}
//表示当前类中所有方法都需要ROLE_ADMIN或者ROLE_PRODUCT才能访问
@Controller
@RequestMapping("/product")
@Secured({"ROLE_ADMIN","ROLE_PRODUCT"})//SpringSecurity注解
public class ProductController {
@RequestMapping("/findAll")
public String findAll(){
return "product-list";
}
}

但是会报403无法访问

方式一:在 spring-security.xml配置文件中处理


<!--设置可以用spring的el表达式配置Spring Security并自动生成对应配置组件(过滤器)-->
<security:http auto-config="true" use-expressions="true">
<!--省略其它配置-->
<!--403异常处理-->
<security:access-denied-handler error-page="/403.jsp"/>
</security:http>

方式二:在 web.xml中处理


<error-page>
 <error-code>403</error-code>
 <location>/403.jsp</location>
</error-page>

方式三:编写异常处理器


/**
* @author WGR
* @create 2020/3/2 -- 17:33
*/
@ControllerAdvice
public class ControllerExceptionAdvice {

//只有出现AccessDeniedException异常才调转403.jsp页面
 @ExceptionHandler(AccessDeniedException.class)
 public String exceptionAdvice(){
   System.out.println("1234");
   return "forward:/403.jsp";
 }
}

注:如果是spring项目,也要把这个扫描进去。

SpringSecurity权限控制实现原理解析

SpringSecurity权限控制实现原理解析

来源:https://www.cnblogs.com/dalianpai/p/12397416.html

标签:Spring,Security,权限,控制
0
投稿

猜你喜欢

  • 详解Spring Cloud Zuul中路由配置细节

    2022-07-31 06:55:45
  • Java 给PDF签名时添加可信时间戳的方法

    2022-04-03 12:38:48
  • Java并发编程预防死锁过程详解

    2023-11-09 15:33:58
  • Java 动态代理的多种实现方式

    2023-11-20 05:23:14
  • java和c/c++ 数据类型长度的比较

    2021-06-18 00:07:45
  • java编写贪吃蛇小游戏

    2023-06-19 01:49:54
  • Android 跨进程通Messenger(简单易懂)

    2022-03-24 00:48:25
  • android6.0权限动态申请框架permissiondispatcher的方法

    2023-07-31 10:51:57
  • Spring Boot + Vue 前后端分离开发之前端网络请求封装与配置

    2021-05-28 02:48:41
  • Java中使用Lambda表达式和函数编程示例

    2022-05-06 03:30:40
  • Unity 从Resources中动态加载Sprite图片的操作

    2023-08-26 11:37:18
  • Service Activity的三种交互方式(详解)

    2022-03-16 20:55:08
  • Spring整合Quartz实现定时任务调度的方法

    2023-07-07 00:55:55
  • Unity计时器功能实现示例

    2022-03-08 20:02:39
  • Android编程之json解析实例详解

    2023-06-19 15:32:51
  • Android Spinner 组件的应用实例

    2022-07-12 04:50:13
  • Android Notification的多种用法总结

    2021-07-27 02:31:00
  • C语言植物大战数据结构二叉树递归

    2022-02-13 14:12:06
  • Android实现欢迎滑动页面

    2022-03-13 14:40:53
  • C++指向类成员函数的指针详细解析

    2022-03-05 04:50:28
  • asp之家 软件编程 m.aspxhome.com