Spring-security

本文围绕Spring-security展开,介绍了其在提交参数、配置文件等方面的设置,探讨了DelegatingFilterProxy的相关问题。还阐述了服务器端方法级权限控制,包括三种注解的使用及开启方式,以及页面端标签控制权限的方法,如jsp页面中权限标签的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

Spring-security,提供一个Controller,servicec层继承UserDetailsService接口,在提交的参数中,Spring-security默认提供的是 username,


 在web.xml文件中配置
问题:为什么DelegatingFilterProxy的filter-name必须是springSecurityFilterChain?
DelegatingFilterProxy并不是真正的Filter,在其initFilterBean方法中会从WebApplicationContext根据delegate
来获取到,权限控制为USER,ADMIN

 

                                                         Spring-security在服务器端方法级权限控制

在服务器端我们可以通过Spring security提供的注解对方法来进行权限控制。Spring Security在方法的权限控制上
支持三种类型的注解,JSR-250注解、@Secured注解和支持表达式的注解,这三种注解默认都是没有启用的,需要
单独通过global-method-security元素的对应属性进行启用

配置文件
<security:global-method-security jsr250-annotations="enabled"/>
<security:global-method-security secured-annotations="enabled"/>
<security:global-method-security pre-post-annotations="disabled"/>
注解开启
@EnableGlobalMethodSecurity :Spring Security默认是禁用注解的,要想开启注解,需要在继承
WebSecurityConfigurerAdapter的类上加@EnableGlobalMethodSecurity注解,并在该类中将
AuthenticationManager定义为Bean。

JSR-250注解

导包

<dependency>
    <groupId>javax.annotation</groupId>
    <artifactId>jsr250-api</artifactId>
    <version>1.0</version>
</dependency>

开启注解,用注解来控制 @RolesAllowed表示访问对应方法时所应该具有的角色

使用这个注解 得补全权限管理  @Secured("ROLE_ADMIN")

3.支持表达式的注解(推荐使用)
@PreAuthorize 在方法调用之前,基于表达式的计算结果来限制对方法的访问

PreAuthorize("#userId == authentication.principal.userId or hasAuthority(‘ADMIN’)")

判断方法参数userId的值是否等于principal中保存的当前用户的
userId,或者当前用户是否具有ROLE_ADMIN权限,两种符合其一,就可以访问该方法。

                                                       Spring-security 页面端标签控制权限
在jsp页面中我们可以使用spring security提供的权限标签来进行权限控制

<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-taglibs</artifactId>
<version>version</version>
</dependency>

页面导入

<%@taglib uri="http://www.springframework.org/security/tags" prefix="security"%>

在jsp中我们可以使用以下三种标签,其中authentication代表的是当前认证对象,可以获取当前认证对象信息,例
如用户名。常用于欢迎XXX, 其它两个标签我们可以用于权限控制

<security:authentication property="" htmlEscape="" scope="" var=""/>

authorize是用来判断普通权限的,通过判断用户是否具有对应的权限而控制其所包含内容的显示

<security:authorize access="" method="" url="" var=""></security:authorize>
access: 需要使用表达式来判断权限,当表达式的返回结果为true时表示拥有对应的权限
method:method属性是配合url属性一起使用的,表示用户应当具有指定url指定method访问的权限,
method的默认值为GET,可选值为http请求的7种方法
url:url表示如果用户拥有访问指定url的权限即表示可以显示authorize标签包含的内容
var:用于指定将权限鉴定的结果存放在pageContext的哪个属性中

用于不向某些权限展示可以看到的标签

 

 

  

 

 

 

### Spring Boot Starter SecuritySpring Security BOM 的区别 #### 功能定位差异 `spring-boot-starter-security` 是一个启动器,旨在简化安全模块集成到基于 Spring Boot 的应用程序中的过程。它自动配置了许多常见的安全设置并提供了默认的安全机制[^1]。 相比之下,`spring-security-bom` 并不是一个具体的库或组件实现者;相反,这是一个 Bill of Materials (BOM),用于管理依赖版本的一致性和兼容性。通过引入 `spring-security-bom` 到项目中,可以确保所有来自 Spring Security 生态系统的依赖项都使用相同且经过测试验证过的版本组合[^2]。 #### 使用场景不同 当开发者希望快速启用基本安全性功能而无需手动调整太多细节时,通常会选择 `spring-boot-starter-security` 。这个 starter 已经包含了大多数开发人员所需的核心类和特性,并能与 Spring Boot 自动化配置无缝协作[^3]。 另一方面,如果团队更关注于整个项目的依赖管理和一致性,则可能会考虑加入 `spring-security-bom` 来控制所使用的各个子项目的具体版本号。这对于大型企业级应用尤其重要,在这些环境中保持一致性的依赖关系对于维护稳定至关重要[^4]。 ```xml <!-- 引入 spring-boot-starter-security --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> <!-- 或者引入 spring-security-bom --> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-bom</artifactId> <version>${spring-security.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值