SpringSecurity权限控制实现原理解析

 更新时间:2020年03月03日 14:29:58   作者:天宇轩-王  
这篇文章主要介绍了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项目,也要把这个扫描进去。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Java编程用两个栈实现队列代码分享

    Java编程用两个栈实现队列代码分享

    这篇文章主要介绍了Java编程用两个栈实现队列代码分享,具有一定参考价值,这里给大家分享下,供需要的朋友了解。
    2017-10-10
  • Java如何配置IDEA自定义注释

    Java如何配置IDEA自定义注释

    在IDEA中设置自动创建类和方法的注释可以提高编码效率,确保代码的一致性和可读性,首先,对于创建类的注释,可以通过修改File→Settings→File and Code Templates→Class的模板来实现,其次,对于方法注释
    2024-10-10
  • 详解如何在Spring中为@Value注解设置默认值

    详解如何在Spring中为@Value注解设置默认值

    在Spring开发中,我们经常会遇到需要从配置文件中读取属性的情况,@Value注解是Spring提供的一种便捷方式,能够让我们轻松地将配置文件中的属性注入到Spring Bean中,
    2024-10-10
  • 深入理解Java中的String(示例详解)

    深入理解Java中的String(示例详解)

    文章详细介绍了Java中String类的特点、用途、主要方法以及常见用法,String类是不可变的,具有字符串常量池,特定的内存结构,并随JDK版本更新而优化,它广泛用于表示和处理文本数据,并在内存管理和性能优化方面表现出色,感兴趣的朋友一起看看吧
    2025-03-03
  • Java开发人员需知的十大戒律

    Java开发人员需知的十大戒律

    这篇文章主要介绍了Java开发人员需知的十大戒律,较为详细的总结分析了Java开发中常见的注意事项与编程技巧,需要的朋友可以参考下
    2015-10-10
  • SpringMVC中参数绑定问题实例详解

    SpringMVC中参数绑定问题实例详解

    springmvc是用来处理页面的一些请求,然后将数据再通过视图返回给用户的,下面这篇文章主要给大家介绍了关于SpringMVC中参数绑定问题的相关资料,需要的朋友可以参考下
    2022-04-04
  • Java基于循环递归回溯实现八皇后问题算法示例

    Java基于循环递归回溯实现八皇后问题算法示例

    这篇文章主要介绍了Java基于循环递归回溯实现八皇后问题算法,结合具体实例形式分析了java的遍历、递归、回溯等算法实现八皇后问题的具体步骤与相关操作技巧,需要的朋友可以参考下
    2017-06-06
  • Java8对List排序的方法大全

    Java8对List排序的方法大全

    这篇文章主要给大家介绍了关于Java8对List排序的方法大全,其实Java针对数组和List的排序都有实现,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-07-07
  • SpringBoot熔断机制之CircuitBreaker详解

    SpringBoot熔断机制之CircuitBreaker详解

    这篇文章主要介绍了SpringBoot熔断机制之CircuitBreaker详解,SpringBoot的熔断机制在微服务架构中扮演着重要角色,其中CircuitBreaker是其核心机制之一,用于防止服务的异常状态影响到整个系统的运作,需要的朋友可以参考下
    2023-10-10
  • Java中的DecimalFormat用法解析

    Java中的DecimalFormat用法解析

    这篇文章主要介绍了Java中的DecimalFormat用法解析,DecimalFormat是Java中用于格式化数字的类,它提供了一种简单而灵活的方式来格式化数字,包括指定小数位数、千位分隔符、货币符号等,需要的朋友可以参考下
    2023-10-10

最新评论