Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Spring Security 权限控制

Spring Security 权限控制

作者头像
Demo_Null
发布于 2020-10-26 09:09:42
发布于 2020-10-26 09:09:42
1.3K00
代码可运行
举报
文章被收录于专栏:Java 学习Java 学习
运行总次数:0
代码可运行

1.1 授权操作

1.1.1 开启注解支持

  这个注解支持必须卸载 MVC 的配置文件中,这是因为我们将注解加载 Controller 层上,该层由前端控制器加载,故位于 Spring Ioc 的子容器中,而 MVC 配置文件也是由 DispatcherServlet 加载的。将注解支持写到 Spring 的配置文件中注解将会不生效。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:security="http://www.springframework.org/schema/security"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
			    http://www.springframework.org/schema/beans/spring-beans.xsd
                http://www.springframework.org/schema/security
			    http://www.springframework.org/schema/security/spring-security.xsd">


    <!--
        开启权限控制的注解支持, 开启一个就可以了
        secured-annotations="enabled" 		Spring Security 内部的权限控制注解开关
        pre-post-annotations="enabled" 		Spring 指定的权限控制的注解开关
        jsr250-annotations="enabled" 		开启 java-250 注解支持
    -->
    <security:global-method-security
            secured-annotations="enabled"
            pre-post-annotations="enabled"
            jsr250-annotations="enabled"/>

</beans>

1.1.2 对应注解

☞ Spring Security 内部注解
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * Created with IntelliJ IDEA.
 *
 * @author Demo_Null
 * @date 2020/10/12
 * @description Spring Security 内部制定的注解
 */
@RestController
@RequestMapping("/user")
public class UserController {

    @Secured({"ROLE_USER","ROLE_ADMIN"})
    @RequestMapping("/findAll")
    public Object findAll(){
        return obj;
    }

}
☞ jsr-250 注解
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * Created with IntelliJ IDEA.
 *
 * @author Demo_Null
 * @date 2020/10/12
 * @description  jsr-250 注解
 */
@RestController
@RequestMapping("/user")
public class UserController {

    @RolesAllowed({"ROLE_USER","ROLE_ADMIN"})
    @RequestMapping("/findAll")
    public Object findAll(){
        return obj;
    }

}
☞ Spring 注解

  此注解需要使用 SPEL 表达式,所以想要使用该注解需要在 Security 配置文件中开启 SPEL 表达式支持,Security 默认 use-expressions="true",开启之后配置文件中的角色信息应该使用 <security:intercept-url pattern="/**" access="hasAnyRole('ROLE_USER','ROLE_ADMIN')"/> 或者 access=“hasRole(‘ROLE_USER’,‘ROLE_ADMIN’)”,二者之间的区别是 hasAnyRole 只需要拥有二者之间任意权限即可,而 hasRole 需要同时具有有所权限才行。还有另外两种表示 hasAnyAuthority、hasAuthority 与之前那种配置的区别是前者没有 ROLE_ 将会自动添加,后者不会。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * Created with IntelliJ IDEA.
 *
 * @author Demo_Null
 * @date 2020/10/12
 * @description  Spring 的 el 表达式注解
 */
@RestController
@RequestMapping("/user")
public class UserController {

    @PreAuthorize("hasAnyAuthority('ROLE_USER','ROLE_ADMIN')")
    @RequestMapping("/findAll")
    public Object findAll(){
        return obj;
    }

}

1.2 异常处理

1.2.1 security 配置文件中处理【了解】

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<security:http auto-config="true" use-expressions="true">
	<!-- 省略其他配置 -->
	
	<!-- 处理 403 异常 -->
	<security:access-denied-handler error-page="/403.html"/>
</security:http>

1.2.2 web.xml 中处理【了解】

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
          http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
         version="3.0">

	<!--处理403异常-->
	<error-page>
		<error-code>403</error-code>
		<location>/403.html</location>
	</error-page>
	
	<!--处理404异常-->
	<error-page>
		<error-code>404</error-code>
		<location>/404.html</location>
	</error-page>

</web-app>

1.2.3 异常处理器【了解】

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Component
public class HandlerControllerException implements HandlerExceptionResolver {
    /**
     * @param httpServletRequest
     * @param httpServletResponse
     * @param o  出现异常的对象
     * @param e  出现的异常信息
     * @return   ModelAndView
     */
    @Override
    public ModelAndView resolveException(HttpServletRequest httpServletRequest, 
    						HttpServletResponse httpServletResponse, Object o, Exception e) {
        ModelAndView mv = new ModelAndView();
        // 将异常信息放入 request 域中,基本不用
        mv.addObject("errorMsg", e.getMessage());
        // 指定不同异常跳转的页面
        if(e instanceof AccessDeniedException){
            mv.setViewName("redirect:/403.html");
        }else {
            mv.setViewName("redirect:/500.html");
        }
        return mv;
    }
}

1.2.4 全局异常处理

  可以利用 AOP 做全局异常处理

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@ControllerAdvice
public class HandlerControllerAdvice {

    @ExceptionHandler(AccessDeniedException.class)
    public String handlerException(){
        return "redirect:/403.html";
    }

    @ExceptionHandler(RuntimeException.class)
    public String runtimeHandlerException(){
        return "redirect:/500.html";
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/10/15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Spring Security 4 使用@PreAuthorize,@PostAuthorize, @Secured, EL实现方法安全(带源码)
【相关已翻译的本系列其他文章,点击分类里面的spring security 4】
明明如月学长
2021/08/27
2.7K0
SpringSecurity授权管理介绍
  权限管理的两大核心是:认证和授权,前面我们已经介绍完了认证的内容,本文就给大家来介绍下SpringSecurity的授权管理
用户4919348
2019/12/11
6950
SpringSecurity授权管理介绍
Spring Security笔记:Hello World
本文演示了Spring Security的最最基本用法,二个页面(或理解成二个url),一个需要登录认证后才能访问(比如:../admin/),一个可匿名访问(比如:../welcome) 注:以下内容参考了 http://www.mkyong.com/spring-security/spring-security-hello-world-example/ 一、利用STS(Spring Tools Suite)创建一个Spring MVC Project 如果不想使用STS,在普通Eclipse上安装Spr
菩提树下的杨过
2018/01/24
8390
Spring Security笔记:Hello World
Spring Security:基础知识
Spring Security是Spring采用AOP思想,基于servlet过滤器实现的安全框架。它提供了完善的认证机制和方法级的授权功能。是一款非常优秀的权限管理框架。
Java鱼头
2022/11/30
1.5K1
SSM综合案例之动态权限实战教程
权限框架本身是由多个不同功能的过滤器组成的,不同的过滤器负责不同的功能例如认证过滤、静态资源过滤、等 授权过滤也是一样,决策器就是同于判断当前请求的url当前账号是否拥有权限
张哥编程
2024/12/13
1050
重新梳理了一下Spring Security的注解访问权限控制
Spring Security默认是关闭方法注解的,开启它只需要通过引入@EnableGlobalMethodSecurity注解即可:
码农小胖哥
2022/05/22
1.7K0
重新梳理了一下Spring Security的注解访问权限控制
springsecurity框架的学习,根据操作修改后台ssm项目进行学习,利用注解控制权限(十三)
之前的我们实现了不同的用户登录之后,可以查看不同的菜单,这个控制是在前段页面使用springsecurity框架的标签进行限制的。现在我们还有另外的方法,那就是在controller层或者service层用注解进行控制,也就是写了注解之后,只有对应的权限才可以访问这个接口,没有的话就不走这个接口,也就走不到后面的业务层,这样就实现了控制。
一写代码就开心
2020/11/20
5550
springsecurity框架的学习,根据操作修改后台ssm项目进行学习,利用注解控制权限(十三)
Spring思维导图,让Spring不再难懂(mvc篇)
在前面 生活就像海洋,只有意志坚强的人才能到达彼岸。已经很久没有发文章了呀,想必大家都挂念我了,哈哈。温故而知新,今天一起来复习一下spring mvc的内容吧。 spring mvc简介与运行原理
java思维导图
2018/03/15
1.3K0
Spring思维导图,让Spring不再难懂(mvc篇)
Spring Security笔记:使用数据库进行用户认证(form login using database)
在前一节,学习了如何自定义登录页,但是用户名、密码仍然是配置在xml中的,这样显然太非主流,本节将学习如何把用户名/密码/角色存储在db中,通过db来实现用户认证
菩提树下的杨过
2018/09/20
1.1K0
Spring Security笔记:使用数据库进行用户认证(form login using database)
spring安全框架Security(一) 转
    现在很多企业和开发团队都使用了SSH2(Struts 2 +Spring 2.5 +Hibernate)框架来进行开发,  我们或许已经习惯了强大的Spring Framework 全局配置管理,不可否认,Sping是一个很优秀的开源框架,但是由于Spring3.0版本后强大的的注解式bean的诞生,Spring MVC框架这匹黑马正悄然杀起,但今天Spring MVC不是主角,今天我和大家分享一个同样隶属于SpringSource 的安全框架——Spring Security, 下面的基于Spring MVC给大家分享一下Spring Security  的使用。虽然对它的接触时间不长,参考了一些网上朋友的做法,但也按照我的理解把这个框架介绍介绍,不是很专业,还请大家不要介意 。   
尚浩宇
2018/08/17
7550
spring安全框架Security(一)
                                                                            转
Spring Boot集成Security使用数据库用户角色权限ROLE_问题问题描述原因分析:解决方案
日志打出来的ROLE是USER,代码里调用的是@PreAuthorize("hasRole('USER')"),为什么权限却是不对?
一个会写诗的程序员
2018/08/20
6850
Spring Security 在 Spring Boot 中的使用【集中式】
  创建好一个空的 Spring Boot 项目之后,写一个 controller 验证此时是可以直接访问到该控制器的。
Demo_Null
2020/10/28
2.8K0
Spring Security 在 Spring Boot 中的使用【集中式】
springboot+security 内存中读取账号密码 自定义加密规则
码云地址:https://gitee.com/huatao1994/springbootSecurity/tree/master
用户5899361
2020/12/07
5180
springboot+security  内存中读取账号密码 自定义加密规则
聊聊spring security的role hierarchy
默认情况下,userDetailsService建立的用户,他们的权限是没有继承关系的
code4it
2018/09/17
1.3K0
SpringMVC异常处理
在程序开发中,不管是那层的业务,都会不可避免的出现异常处理。如果每层单独处理异常,那么系统的代码的耦合度就会提高。而且工作量也会加大,不好处理。
星哥玩云
2022/09/15
4080
SpringMVC异常处理
Spring MVC体系结构和处理请求控制器
@Controller用于标记在一个类上,使用它标记的类就是一个SpringMvc Controller对象,分发处理器会扫描使用该注解的类的方法,并检测该方法是否使用了@RequestMapping注解。 @Controller只是定义了一个控制器类,而使用@RequestMapping注解的方法才是处理请求的处理器。 @Controller标记在一个类上还不能真正意义上说它就是SpringMvc的控制器,应为这个时候Spring还不认识它,这个时候需要把这个控制器交给Spring来管理
xiaozhangStu
2023/05/04
4300
spring security3.2配置—权限管理
之前已经在我的博客中发过security的执行流程图了,大家能够先去看看那个图再看这篇。今天我主要在这里贴出了security配置中的几个重要的类和两个xml配置文件,基本上控制权限的就是这几个文件了。由于近期都比較忙,一直没有时间发出来,导致有点忘记配置时的过程了,所以忘记了一些细节的内容,原本我打算写的具体一点的,但如今都有点忘记了,我在这里就不再一一写出来了,由于在每一个文件的方法或配置里,我用凝视说明了一些配置时所遇到的问题,大家能够看看,可能比較难看,由于表达可能不是非常好,有些写得比較具体,导致非常乱。假设大家有在网上搜索这类文章,基本上大多数配置都是差点儿相同的,这在此之前也在网上參考了几篇文章,都写的不错,我也是參考那里配置的。我给出我看过的几个网址出来,大家能够也去看看:
全栈程序员站长
2022/07/12
5700
Spring Security判断用户是否已经登录方法一、JSP中检查user principal方法二、检查角色方法三、 还是查询用户方法四、 使用标签库方法五、 使用注解方法六、 编程
方法一、JSP中检查user principal <c:if test="${pageContext.request.userPrincipal.name != null}"> <label> Hi ${pageContext.request.userPrincipal.name} ! Welcome to our site </label> </c:if> <c:choose> <c:when test="${pageContext.request.userPrincipa
孙亖
2018/06/07
3.9K0
SSM综合案例之SpringSecurity安全框架技术
Spring Security 的前身是 Acegi Security ,是 Spring 项目组中用来提供安全认证服务的框架。
张哥编程
2024/12/13
2310
springboot综合案例第三课
Spring Security 的前身是 Acegi Security ,是 Spring 项目组中用来提供安全认证服务的框架。
张哥编程
2024/12/13
980
推荐阅读
相关推荐
Spring Security 4 使用@PreAuthorize,@PostAuthorize, @Secured, EL实现方法安全(带源码)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验