欢迎来到代码驿站!

JAVA代码

当前位置:首页 > 软件编程 > JAVA代码

SpringSecurity权限控制实现原理解析

时间:2021-02-28 14:50:27|栏目:JAVA代码|点击:

菜单控制:

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

数据控制:

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

<!--
    开启权限控制注解支持
    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项目,也要把这个扫描进去。

上一篇:Logger.error打印错误异常的详细堆栈信息

栏    目:JAVA代码

下一篇:Java统计输入字符的英文字母、空格、数字和其它

本文标题:SpringSecurity权限控制实现原理解析

本文地址:http://www.codeinn.net/misctech/71477.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有