说明
(2)Spring Boot 2.0.6
(3)Spring Security 5.0.9
(4)Spring Data JPA 2.0.11.RELEASE
(5)hibernate5.2.17.Final
(6)MySQLDriver 5.1.47
(7)MySQL 8.0.12
需求缘起
在之前的章节中我们介绍过通过注解的方式进行权限的控制了,这里再详细的讲解下方法级安全的几个注解。
一、注解式方法级安全开启
需要在WebSecuirtyConfig添加配置:
@Configuration
@EnableWebSecurity //启用Spring Security.
////会拦截注解了@PreAuthrize注解的配置.
@EnableGlobalMethodSecurity(prePostEnabled=true)
public class WebSecurityConfig extends WebSecurityConfigurerAdapter{
}
二、允许的注解
这里主要@PreAuthorize, @PostAuthorize, @Secured这三个注解可以使用。
2.1 @Secured
当@EnableGlobalMethodSecurity(securedEnabled=true)的时候,@Secured可以使用:
@GetMapping("/helloUser")
@Secured({"ROLE_normal","ROLE_admin"})
public String helloUser() {
return "hello,user";
}
说明:拥有normal或者admin角色的用户都可以方法helloUser()方法。另外需要注意的是这里匹配的字符串需要添加前缀“ROLE_“。
如果我们要求,只有同时拥有admin & noremal的用户才能方法helloUser()方法,这时候@Secured就无能为力了。
2.2 @PreAuthorize
Spring的 @PreAuthorize/@PostAuthorize 注解更适合方法级的安全,也支持Spring 表达式语言,提供了基于表达式的访问控制。
当@EnableGlobalMethodSecurity(prePostEnabled=true)的时候,@PreAuthorize可以使用:
@GetMapping("/helloUser")
@PreAuthorize("hasAnyRole('normal','admin')")
public String helloUser() {
return "hello,user";
}
说明:拥有normal或者admin角色的用户都可以方法helloUser()方法。
此时如果我们要求用户必须同时拥有normal和admin的话,那么可以这么编码:
@GetMapping("/helloUser")
@PreAuthorize("hasRole('normal') AND hasRole('admin')")
public String helloUser() {
return "hello,user";
}
此时如果使用user/123登录的话,就无法访问helloUser()的方法了。
2.3 @PostAuthorize
@PostAuthorize 注解使用并不多,在方法执行后再进行权限验证,适合验证带有返回值的权限,Spring EL 提供 返回对象能够在表达式语言中获取返回的对象returnObject。
当@EnableGlobalMethodSecurity(prePostEnabled=true)的时候,@PostAuthorize可以使用:
@GetMapping("/helloUser")
@PostAuthorize(" returnObject!=null && returnObject.username == authentication.name")
public User helloUser() {
Object pricipal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();
User user;
if("anonymousUser".equals(pricipal)) {
user = null;
}else {
user = (User) pricipal;
}
return user;
}
这三个最常用也就是@PreAuthorize这个注解了,在使用中主要是配合Spring EL表达式。
历史文章
215.Spring Boot+Spring Security:初体验
216.Spring Boot+Spring Security:基于内存的认证信息
217.Spring Boot+Spring Security:基于内存的角色授权
218.Spring Boot+Spring Security:基于内存数据库的身份认证和角色授权
219.Spring Boot+Spring Security:基于MySQL数据库的身份认证和角色授权
220.Spring Boot+Spring Security:自定义登录页面和构建主页
221.Spring Boot+Spring Security:登出和403处理
222.Spring Boot+Spring Security:动态加载角色
223.Spring Boot+Spring Security:原理1
224.Spring Boot+Spring Security:自定义Filter
246.Spring Boot+Spring Security:页面白名单和获取登录信息
13. Spring Boot+Spring Security:基于URL动态权限n种方案
248.Spring Boot+Spring Security:基于URL动态权限:准备工作
249.Spring Boot+Spring Security:基于URL动态权限:扩展access()的SpEL表达式
250.Spring Boot+Spring Security:基于URL动态权限:自定义AccssDesionManager
251.Spring Boot+Spring Security:基于URL动态权限:自定义Filter
252.Spring Boot+Spring Security:标签sec:authorize的使用
253.Spring Boot+Spring Security:获取用户信息和session并发控制
我就是我,是颜色不一样的烟火。
我就是我,是与众不同的小苹果。
à悟空学院:https://t.cn/Rg3fKJD
学院中有Spring Boot相关的课程!点击「阅读原文」进行查看!
SpringBoot视频:http://t.cn/A6ZagYTi
Spring Cloud视频:http://t.cn/A6ZagxSR
SpringBoot Shiro视频:http://t.cn/A6Zag7IV
SpringBoot交流平台:https://t.cn/R3QDhU0
SpringData和JPA视频:http://t.cn/A6Zad1OH
SpringSecurity5.0视频:http://t.cn/A6ZadMBe
Sharding-JDBC分库分表实战:http://t.cn/A6ZarrqS
分布式事务解决方案「手写代码」:http://t.cn/A6ZaBnIr
相关推荐
在Spring Security配置中,我们可以定义安全拦截规则,如`@Secured`或`@PreAuthorize`注解,来指定哪些方法需要特定的角色或权限才能访问。此外,我们还可以通过`http.authorizeRequests()`方法定义URL级别的访问...
3. 权限控制:通过@PreAuthorize、@Secured注解实现方法级别的权限控制,或在Spring Security配置中定义访问规则。 4. CSRF防护:Spring Security默认开启CSRF(跨站请求伪造)防护,确保请求的安全性。 5. ...
例如,`@Secured`或`@PreAuthorize`注解可以用来指定只有具有特定角色的用户才能访问方法或资源。 - **表达式式语言(EL)**:Spring Security的访问决策管理器支持使用SpEL(Spring Expression Language)来更精细...
例如,@Secured, @PreAuthorize, @PostAuthorize 注解可以在方法级别控制访问。 3. **Filter Chain**:Spring Security 的核心是Filter Chain,它由一系列的过滤器组成,这些过滤器处理HTTP请求并执行安全操作。...
手册会解析如何定义权限规则,如`@Secured`和`@PreAuthorize`注解的使用。 4. **过滤器链**:Spring Security通过一系列过滤器处理HTTP请求,如`DelegatingFilterProxy`、`ChannelProcessingFilter`、`...
Spring Security 支持基于角色的访问控制(RBAC),并可以通过注解如 `@Secured` 和 `@PreAuthorize` 进行方法级别的细粒度控制。此外,它还支持表达式语言(EL)进行复杂的访问控制决策。 四、会话管理 Spring ...
Spring Security 提供了基于角色的访问控制(RBAC),你可以为每个角色分配权限,并通过注解如 `@Secured` 或 `@PreAuthorize` 来限制方法级别的访问。此外,它还支持表达式语言(EL)进行细粒度的授权控制,例如 `@...
2. **注解驱动**:除了XML,3.1.0.RELEASE也支持使用Java配置和注解,使得配置更加简洁直观,如`@Secured`、`@PreAuthorize`等。 3. **表达式语言**:Spring Security 3.1.0引入了基于Spring EL的访问控制表达式,...
例如,@Secured注解用于限制只有特定角色的用户才能访问某个方法,而@PreAuthorize或@PostAuthorize则可以根据表达式进行细粒度的权限控制。 订单管理通常涉及到事务处理,Spring Boot集成的Spring Transaction管理...
3. **URL保护**: 学习如何使用`@Secured`和`@PreAuthorize`注解来保护控制器方法,以及如何通过HTTP安全头增强应用安全性。 4. **表达式式访问控制**: 探索Spring Security的表达式语言(EL),如`hasRole`、`...
- **Annotation配置**:Spring Security 3也支持使用注解来简化配置,比如`@Secured`、`@PreAuthorize`等。 4. **会话管理** - **Session Management**:Spring Security提供了会话固定保护,防止会话劫持和会话...
3. 权限控制:使用注解如`@Secured`、`@PreAuthorize`、`@PostAuthorize`等进行方法级别的权限控制,或者通过Acegi Security表达式语言(Spring EL)在控制器层进行细粒度的权限判断。 三、Filter-based权限验证 ...
首先,Spring Security提供了基于注解和XML配置的访问控制,如`@Secured`和`@PreAuthorize`等,允许我们精细化地控制谁可以访问哪些资源。但有时,我们需要更灵活的方式,比如根据用户权限动态生成页面内容。这就...
Spring Security还提供了基于注解的安全控制,如`@Secured`和`@PreAuthorize`。这些注解可以应用在方法上,使得只有拥有相应权限的用户才能执行该方法。 为了增强安全性,Spring Security还提供了CSRF(跨站请求...
Spring Security 支持基于角色的访问控制(RBAC),你可以使用`@Secured`或`@PreAuthorize`等注解来限制方法或URL的访问。此外,它也支持表达式语言(Spring EL)进行更复杂的访问决策。 3. **过滤器链(Filter ...
这可以通过使用`@Secured`注解、表达式式语言(Spring EL)或者访问决策管理器(Access Decision Manager)来实现。例如,`@Secured("ROLE_ADMIN")`可以限制只有拥有"ADMIN"角色的用户才能访问特定的方法。 Spring ...
例如,可以使用`@Secured`或`@PreAuthorize`注解限制方法的访问权限。 3. **过滤器链(Filter Chain)**:Spring Security通过一系列过滤器实现其功能。如`HttpSessionAuthenticationStrategy`处理会话认证,`...
Spring Security是Java领域中一款广泛使用的安全框架,用于保护Web应用程序免受各种安全威胁。它提供了全面的身份验证、授权和访问控制功能。本资源提供的"spring security3.07"教程和"contacts"示例源码,对于学习...
8. **表达式语言**:Spring Security的访问决策器可以使用一种强大的表达式语言(EL)来定义复杂的访问规则,如`@Secured`和`@PreAuthorize`注解。 9. **集成其他Spring模块**:Spring Security与Spring MVC、...
- 控制器方法上添加@Secured或@PreAuthorize注解实现访问控制。 4. **数据库操作**: - 通常使用Spring Data JPA或MyBatis作为持久层框架,简化数据库操作。 - 数据库连接配置在application.properties或yaml...