spring-security实现方法级别、页面端的权限控制

spring-security实现方法级别、页面端的权限控制(结合黑马SSM实现权限管理项目)

 

目录

spring-security实现方法级别、页面端的权限控制(结合黑马SSM实现权限管理项目)

1.方法级别权限控制

   1.JSR-250注解使用

   2.Secured注解使用

   3.基于表达式操作

2.页面端权限控制


 

1.方法级别权限控制

   1.JSR-250注解使用

  • 导入JSR-250 maven坐标
<dependency>
    <groupId>javax.annotation</groupId>
    <artifactId>jsr250-api</artifactId>
    <version>1.0</version>
</dependency>
  • 在spring-security.xml中开启
<security:global-method-security jsr250-annotations="enabled"/>
  • 在指定的方法上使用

  • 在web.xml中配置错误页面,并创建403.jsp页面

  • 启动项目,测试!

 

   2.Secured注解使用

  • 在spring-security.xml中开启secured的注解使用  (不用导入依赖)
    <!--开启使用secured注解-->
    <security:global-method-security secured-annotations="enabled"/>
  • 在指定的方法上使用

注意事项:在使用JSR-250注解时,ROLE_ 前缀可省略,而在使用@Secured是不能省略前缀的!!

 

   3.基于表达式操作

  • 在spring-security.xml中开启表达式注解的使用
    <!--开启使用pre-post注解-->
    <security:global-method-security pre-post-annotations="enabled"/>
  • 在方法上使用(可以使用SPEL表达式)

 

 

 Spring Security允许我们在定义URL访问或方法访问所应有的权限时使用Spring EL表达式,在定义所需的访问权限时如果对应的表达式返回结果为true则表示拥有对应的权限,反之则无。Spring Security可用表达式对象的基类是SecurityExpressionRoot,其为我们提供了如下在使用Spring EL表达式对URL或方法进行权限控制时通用的内置表达式。

表达式

描述

hasRole([role])

当前用户是否拥有指定角色。

hasAnyRole([role1,role2])

多个角色是一个以逗号进行分隔的字符串。如果当前用户拥有指定角色中的任意一个则返回true。

hasAuthority([auth])

等同于hasRole

hasAnyAuthority([auth1,auth2])

等同于hasAnyRole

Principle

代表当前用户的principle对象

authentication

直接从SecurityContext获取的当前Authentication对象

permitAll

总是返回true,表示允许所有的

denyAll

总是返回false,表示拒绝所有的

isAnonymous()

当前用户是否是一个匿名用户

isRememberMe()

表示当前用户是否是通过Remember-Me自动登录的

isAuthenticated()

表示当前用户是否已经登录认证成功了。

isFullyAuthenticated()

如果当前用户既不是一个匿名用户,同时又不是通过Remember-Me自动登录的,则返回true。 

 

spel表达式参考:https://www.cnblogs.com/lukelook/p/11169666.html

 

2.页面端权限控制

  • 导入maven坐标
 <dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-taglibs</artifactId>
    <version>${spring.security.version}</version>
</dependency>
  • 在jsp页面导入
<%@ taglib prefix="security" uri="http://www.springframework.org/security/tags" %>
  • 在页面上使用

authentication  :  可以获取当前正在操作的用户信息

可参考我另一篇播客:https://blog.csdn.net/qq_45441466/article/details/109558443

 

authorize :用于控制页面上某些标签是否可以显示

eg:只有ROLE_ADMIN角色才能显示用户管理

在spring-security.xml中也需要修改:

将是否使用SPEL表达式改为 true ,并且access 改为spel表达式

此时测试没有角色ROLE_ADMIN的用户,是没有用户管理这一栏的!

 

若你不想改use-expressions 和 access,可以在spring-security.xml中添加:

<bean id="webexpressionHandler" class="org.springframework.security.web.access.expression.DefaultWebSecurityExpressionHandler"/>

 

  • 常用标签

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值