365bet真人平台-365bet体育在线投注官网-bet体育365冻卡么

记录时光的故事

30个SpringSecurity注解:注解架构设计与应用详解(必须收藏)

分类: 365bet体育在线投注官网 时间: 2025-10-01 04:50:11 作者: admin 阅读: 1591
30个SpringSecurity注解:注解架构设计与应用详解(必须收藏)

Spring Security 通过一系列注解简化了安全配置,使得开发者能够以声明式的方式实现安全控制。这些注解包括用于启用安全特性的 @EnableWebSecurity 和 @EnableGlobalMethodSecurity,以及用于方法级别的安全控制,如 @PreAuthorize 和 @PostAuthorize。此外,@EnableOAuth2Client 和 @EnableOAuth2ResourceServer 等注解支持 OAuth2 认证和资源保护。这些注解共同构成了 Spring Security 的强大工具集,帮助开发者构建既安全又易于维护的应用程序。

肖哥弹架构 跟大家“弹弹” 框架注解使用,需要代码关注欢迎 点赞,关注,评论。关注公号Solomon肖哥弹架构获取更多精彩内容历史热点文章Spring Security 应用层注解设计方案Web Security Module: 负责 Web 应用的 URL 授权、表单登录、注销等。@EnableWebSecurity: 启用 Web 安全配置。@EnableGlobalMethodSecurity: 启用全局方法安全配置。Method Security Module: 负责方法级别的安全性控制。@PreAuthorize, @PostAuthorize, @Secured, @RolesAllowed, 等: 控制方法的访问权限。OAuth2 Module: 负责 OAuth2 客户端、单点登录、资源服务器和授权服务器的配置。@EnableOAuth2Client, @EnableOAuth2Sso, @EnableOAuth2ResourceServer, @EnableOAuth2AuthorizationServer: 启用 OAuth2 相关支持。Parameter Binding Module: 负责从 HTTP 请求中提取信息并绑定到方法参数。@AuthenticationPrincipal, @CurrentSecurityContext, @RequestHeader, @CookieValue, @SessionAttribute: 绑定请求相关的数据。Password Encoding Module: 负责密码的安全编码。@PasswordEncode, @BCrypt: 指定密码编码方式。Other Security Features: 负责其他安全特性,如缓存控制。@NoCache: 用于防止安全决策结果被缓存。Spring Security 注解分类:1. 启用安全支持@EnableWebSecurity: 用于启用 Spring Security 的 Web 安全支持,通常在配置类上使用,以激活基于方法的安全和其他 Web 安全特性。@EnableGlobalMethodSecurity: 用于启用全局方法安全性配置,允许在整个应用程序中使用 Spring Security 的方法安全注解。@EnableOAuth2Client: 用于启用 OAuth2 客户端支持,允许应用程序作为 OAuth2 客户端进行配置。@EnableOAuth2Sso: 用于启用 OAuth2 单点登录支持,允许应用程序参与单点登录流程。@EnableOAuth2ResourceServer: 用于启用 OAuth2 资源服务器支持,允许应用程序保护资源。@EnableOAuth2AuthorizationServer: 用于启用 OAuth2 授权服务器支持,允许应用程序充当授权服务器。2. 方法安全性注解@PreAuthorize: 用于方法级别的前置权限验证,基于 Spring Expression Language (SpEL) 表达式。@PostAuthorize: 用于方法级别的后置权限验证,基于 SpEL 表达式。@Secured: 用于 JSR-250 安全注解的前置权限验证。@RolesAllowed: 用于 JSR-250 安全注解的角色权限验证。@DenyAll: 用于拒绝所有用户的访问。@permitAll: 允许所有用户访问。@authenticated: 允许所有认证用户访问。@FullyAuthenticated: 允许所有非匿名用户访问。@HasAuthority: 允许具有特定权限的用户访问。@HasAnyAuthority: 允许具有任何指定权限之一的用户访问。@HasRole: 允许具有特定角色的用户访问。@HasAnyRole: 允许具有任何指定角色之一的用户访问。3. 方法参数绑定@AuthenticationPrincipal: 用于将当前认证主体绑定到方法参数。@CurrentSecurityContext: 用于将当前安全上下文绑定到方法参数。@RequestHeader: 用于提取 HTTP 请求头信息并绑定到方法参数。@CookieValue: 用于提取 HTTP 饼干信息并绑定到方法参数。@SessionAttribute: 用于从 HTTP 会话中提取属性值并绑定到方法参数。4. 密码编码@PasswordEncode: 用于指定密码需要进行编码的方式。@BCrypt: 用于指定使用 BCrypt 算法进行密码编码。5. 其他@NoCache: 用于防止 Spring Security 的某些安全决策结果被缓存。Spring Security 注解详解:1. 启用安全支持1.1 @EnableWebSecurity注解作用介绍用于启用 Spring Security 的 Web 安全支持,通常在配置类上使用,以激活基于方法的安全和其他 Web 安全特性。

注解属性介绍无特定属性。注解业务案例@Configuration @EnableWebSecurity public class WebSecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests() .anyRequest().authenticated() .and() .formLogin(); } } 注解使用效果: 使用 @EnableWebSecurity 后,Spring Security 会激活 Web 安全支持,包括 URL 授权和表单登录。1.2 @EnableGlobalMethodSecurity注解作用介绍用于启用全局方法安全性配置,允许在整个应用程序中使用 Spring Security 的方法安全注解。

注解属性介绍prePostEnabled: 是否启用前置和后置权限注解。securedEnabled: 是否启用 @Secured 注解。注解业务案例@Configuration @EnableGlobalMethodSecurity(prePostEnabled = true) public class MethodSecurityConfig { } 注解使用效果 使用 @EnableGlobalMethodSecurity 后,应用程序可以在整个项目中使用 Spring Security 的方法安全注解。1.3 @EnableOAuth2Client注解作用介绍用于启用 OAuth2 客户端支持,允许应用程序作为 OAuth2 客户端进行配置。

注解属性介绍registration: 指定一个 ClientRegistration 的 Bean 名称,该 Bean 包含客户端的配置信息。client: 直接在注解中指定客户端的配置信息。注解业务案例@EnableOAuth2Client @Configuration public class OAuth2ClientConfig { @Bean public ClientRegistration myClientRegistration() { return ClientRegistration.withRegistrationId("client-id") .clientSecret("client-secret") .authorizedGrantType(AuthorizedGrantType.AUTHORIZATION_CODE) .redirectUriTemplate("{baseUrl}/login/oauth2/code/{registrationId}") .scope("read", "write") .authorizationUri("https://provider.com/oauth2/auth") .tokenUri("https://provider.com/oauth2/token") .userInfoUri("https://provider.com/userinfo") .userNameAttributeName("user_name") .build(); } } 注解使用效果: 使用 @EnableOAuth2Client 后,应用程序可以配置为 OAuth2 客户端,允许使用 OAuth2 进行认证和授权。1.4 @EnableOAuth2Sso注解作用介绍用于启用 OAuth2 单点登录支持,允许应用程序参与单点登录流程。

注解属性介绍loginPath: 指定重定向到 OAuth2 认证提供者的路径。failureUrl: 指定认证失败后的重定向路径。注解业务案例@EnableOAuth2Sso @Configuration public class OAuth2SsoConfig { @Override protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests() .anyRequest().authenticated() .and() .oauth2Login() .loginPath("/login") .failureUrl("/login?error"); } } 注解使用效果: 使用 @EnableOAuth2Sso 后,应用程序可以配置为参与 OAuth2 单点登录流程。1.5 @EnableOAuth2ResourceServer注解作用介绍用于启用 OAuth2 资源服务器支持,允许应用程序保护资源。

注解属性介绍jwt: 配置 JWT 资源服务器。opaqueToken: 配置不透明令牌资源服务器。注解业务案例@EnableOAuth2ResourceServer @Configuration public class OAuth2ResourceServerConfig { @Bean public ResourceServerProperties resourceServerProperties() { ResourceServerProperties properties = new ResourceServerProperties(); properties.setJwt().decoder(new NimbusJwtDecoder(issuerUri)); return properties; } } 注解使用效果: 使用 @EnableOAuth2ResourceServer 后,应用程序可以配置为 OAuth2 资源服务器,保护应用程序资源。1.6 @EnableOAuth2AuthorizationServer注解作用介绍用于启用 OAuth2 授权服务器支持,允许应用程序充当授权服务器。

注解属性介绍authorizationCodeServices: 指定授权码服务的 Bean。tokenServices: 指定令牌服务的 Bean。注解业务案例@EnableOAuth2AuthorizationServer @Configuration public class OAuth2AuthorizationServerConfig extends AuthorizationServerConfigurerAdapter { @Override public void configure(AuthorizationServerEndpointsConfigurer endpoints) { endpoints .authorizationCodeServices(new InMemoryAuthorizationCodeServices()) .tokenStore(tokenStore()); } @Bean public TokenStore tokenStore() { return new InMemoryTokenStore(); } } 注解使用效果: 使用 @EnableOAuth2AuthorizationServer 后,应用程序可以配置为 OAuth2 授权服务器,管理客户端和授权流程。2. 方法安全性注解2.1 @PreAuthorize注解作用介绍用于方法级别的前置权限验证,基于 Spring Expression Language (SpEL) 表达式。

注解属性介绍value: 定义一个 SpEL 表达式,用于确定是否有权限执行方法。注解业务案例public class UserService { @PreAuthorize("hasRole('ADMIN')") public void deleteUser(String userId) { // 删除用户逻辑 } } 注解使用效果: 使用 @PreAuthorize 后,只有具有 ADMIN 角色的用户才能调用 deleteUser 方法。2.2 @PostAuthorize注解作用介绍用于方法级别的后置权限验证,基于 SpEL 表达式。

注解属性介绍value: 定义一个 SpEL 表达式,用于在方法执行后确定是否有权限访问返回值。注解业务案例public class UserService { @PostAuthorize("returnObject.username == authentication.principal.username") public User getUser(String userId) { return userRepository.findById(userId); } } 注解使用效果: 使用 @PostAuthorize 后,只有当返回的用户对象与当前认证用户的用户名相匹配时,才能访问 getUser 方法。2.3 @Secured注解作用介绍用于 JSR-250 安全注解的前置权限验证。

注解属性介绍value: 定义角色或权限,用于确定是否有权限执行方法。注解业务案例public class UserService { @Secured("ROLE_ADMIN") public void deleteUser(String userId) { // 删除用户逻辑 } } 注解使用效果: 使用 @Secured 后,只有具有 ROLE_ADMIN 权限的用户才能调用 deleteUser 方法。2.4 @RolesAllowed注解作用介绍用于 JSR-250 安全注解的角色权限验证。

注解属性介绍value: 定义角色列表,用于确定是否有权限执行方法。注解业务案例public class UserService { @RolesAllowed("ADMIN") public void deleteUser(String userId) { // 删除用户逻辑 } } 注解使用效果: 使用 @RolesAllowed 后,只有具有 ADMIN 角色的用户才能调用 deleteUser 方法。2.5 @DenyAll注解作用介绍用于拒绝所有用户的访问。

注解属性介绍无特定属性。注解业务案例public class UserService { @DenyAll public void deleteAllUsers() { // 删除所有用户逻辑 } } 注解使用效果: 使用 @DenyAll 后,任何用户都不能调用 deleteAllUsers 方法。2.6 @permitAll注解作用介绍允许所有用户访问。

注解属性介绍无特定属性。注解业务案例public class UserService { @permitAll public void listUsers() { // 列出所有用户逻辑 } } 注解使用效果: 使用 @permitAll 后,所有用户都可以调用 listUsers 方法。2.7 @authenticated注解作用介绍允许所有认证用户访问。

注解属性介绍无特定属性。注解业务案例public class UserService { @authenticated public User getCurrentUser() { return userService.getCurrentUser(); } } 注解使用效果: 使用 @authenticated 后,只有认证用户才能调用 getCurrentUser 方法。2.8 @FullyAuthenticated注解作用介绍允许所有非匿名用户访问。

注解属性介绍无特定属性。注解业务案例public class UserService { @FullyAuthenticated public void updateProfile(User user) { // 更新用户资料逻辑 } } 注解使用效果: 使用 @FullyAuthenticated 后,只有非匿名用户才能调用 updateProfile 方法。2.9 @HasAuthority注解作用介绍允许具有特定权限的用户访问。

注解属性介绍value: 定义权限,用于确定是否有权限执行方法。注解业务案例public class UserService { @HasAuthority("PERMISSION_USER_DELETE") public void deleteUser(String userId) { // 删除用户逻辑 } } 注解使用效果: 使用 @HasAuthority 后,只有具有 PERMISSION_USER_DELETE 权限的用户才能调用 deleteUser 方法。2.10 @HasAnyAuthority注解作用介绍允许具有任何指定权限之一的用户访问。

注解属性介绍value: 定义权限列表,用于确定是否有权限执行方法。注解业务案例public class UserService { @HasAnyAuthority({"PERMISSION_USER_READ", "PERMISSION_USER_WRITE"}) public User getUser(String userId) { return userRepository.findById(userId); } } 注解使用效果: 使用 @HasAnyAuthority 后,只有具有 PERMISSION_USER_READ 或 PERMISSION_USER_WRITE 权限之一的用户才能调用 getUser 方法。2.11 @HasRole注解作用介绍允许具有特定角色的用户访问。

注解属性介绍value: 定义角色,用于确定是否有权限执行方法。注解业务案例public class UserService { @HasRole("ADMIN") public void deleteUser(String userId) { // 删除用户逻辑 } } 注解使用效果: 使用 @HasRole 后,只有具有 ADMIN 角色的用户才能调用 deleteUser 方法。2.12 @HasAnyRole注解作用介绍允许具有任何指定角色之一的用户访问。

注解属性介绍value: 定义角色列表,用于确定是否有权限执行方法。注解业务案例public class UserService { @HasAnyRole({"ADMIN", "MODERATOR"}) public void deleteUser(String userId) { // 删除用户逻辑 } } 注解使用效果: 使用 @HasAnyRole 后,只有具有 ADMIN 或 MODERATOR 角色之一的用户才能调用 deleteUser 方法。3. 方法参数绑定3.1 @AuthenticationPrincipal注解作用介绍用于将当前认证主体绑定到方法参数。

注解属性介绍无特定属性。注解业务案例public class UserController { @GetMapping("/profile") public String getProfile(@AuthenticationPrincipal User user) { return "Profile of " + user.getUsername(); } } 注解使用效果: 使用 @AuthenticationPrincipal 后,方法 getProfile 将接收当前认证用户的 User 对象。3.2 @CurrentSecurityContext注解作用介绍用于将当前安全上下文绑定到方法参数。

注解属性介绍无特定属性。注解业务案例public class SecurityService { @PreAuthorize("hasAuthority('PERMISSION_AUDIT')") public void auditAction(@CurrentSecurityContext SecurityContext context) { // 审计逻辑 } } 注解使用效果: 使用 @CurrentSecurityContext 后,方法 auditAction 将接收当前安全上下文。3.3 @RequestHeader注解作用介绍:用于提取 HTTP 请求头信息并绑定到方法参数。

注解属性介绍value: 请求头的名称。defaultValue: 如果请求头不存在时的默认值。注解业务案例public class ApiController { @GetMapping("/data") public ResponseEntity getData(@RequestHeader("X-Custom-Header") String customHeader) { return ResponseEntity.ok().body("Custom Header: " + customHeader); } } 注解使用效果: 使用 @RequestHeader 后,方法 getData 将接收名为 X-Custom-Header 的请求头信息。3.4 @CookieValue注解作用介绍用于提取 HTTP 饼干信息并绑定到方法参数。

注解属性介绍value: Cookie 的名称。defaultValue: 如果 Cookie 不存在时的默认值。注解业务案例public class SessionController { @GetMapping("/session-info") public String getSessionInfo(@CookieValue("JSESSIONID") String sessionId) { return "Session ID: " + sessionId; } } 注解使用效果: 使用 @CookieValue 后,方法 getSessionInfo 将接收名为 JSESSIONID 的 Cookie 信息。3.5 @SessionAttribute注解作用介绍用于从 HTTP 会话中提取属性值并绑定到方法参数。

注解属性介绍value: 会话属性的名称。defaultValue: 如果会话属性不存在时的默认值。注解业务案例public class SessionController { @GetMapping("/session-attribute") public String getSessionAttribute(@SessionAttribute("user") User user) { return "User: " + user.getUsername(); } } 注解使用效果: 使用 @SessionAttribute 后,方法 getSessionAttribute 将接收存储在会话中的 user 属性。4. 密码编码4.1 @PasswordEncode注解作用介绍用于指定密码需要进行编码的方式。@PasswordEncode 不是 Spring Security 或 Hutool 的标准注解。通常,我们会使用 Spring Security 提供的 PasswordEncoder 接口来处理密码编码

注解属性介绍value: 指定密码编码器的 Bean 名称。注解业务案例@Configuration public class WebSecurityConfig extends WebSecurityConfigurerAdapter { @Autowired public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { auth .userDetailsService(userDetailsService) .passwordEncoder(passwordEncoder()); } @Bean public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); } } 注解使用效果: 使用 @PasswordEncode 后,配置类中定义了密码编码器为 BCryptPasswordEncoder。4.2 @BCrypt注解作用介绍用于指定使用 BCrypt 算法进行密码编码。

注解属性介绍无特定属性。注解业务案例@Service public class UserService { @BCrypt public String encodePassword(String rawPassword) { return new BCryptPasswordEncoder().encode(rawPassword); } } 注解使用效果: 使用 @BCrypt 后,方法 encodePassword 将使用 BCrypt 算法对密码进行编码。5. 其他5.1 @NoCache注解作用介绍用于防止 Spring Security 的某些安全决策结果被缓存。

注解属性介绍无特定属性。注解业务案例public class SensitiveDataController { @PreAuthorize("hasAuthority('PERMISSION_VIEW_SENSITIVE_DATA')") @NoCache @GetMapping("/sensitive-data") public SensitiveData getSensitiveData() { return sensitiveDataService.getData(); } } 注解使用效果 使用 @NoCache 后,方法 getSensitiveData 的结果不会被缓存,确保每次访问都进行权限检查。6、注解总结Spring Security 注解及其在框架中的作用:

1. 配置和启用安全模块@EnableWebSecurity: 这个注解用于启用 Spring Security 的 Web 安全支持,通常在配置类中使用,以激活基于方法的安全和其他 Web 安全特性。它作用于 Web 应用程序的安全配置模块。@EnableGlobalMethodSecurity: 用于启用全局方法安全性配置,允许在整个应用程序中使用 Spring Security 的方法安全注解。它作用于方法级别的安全性模块。@EnableOAuth2Client: 用于启用 OAuth2 客户端支持,允许应用程序作为 OAuth2 客户端进行配置。它作用于 OAuth2 客户端模块。@EnableOAuth2Sso: 用于启用 OAuth2 单点登录支持,允许应用程序参与单点登录流程。它作用于 OAuth2 SSO 模块。@EnableOAuth2ResourceServer: 用于启用 OAuth2 资源服务器支持,允许应用程序保护资源。它作用于 OAuth2 资源服务器模块。@EnableOAuth2AuthorizationServer: 用于启用 OAuth2 授权服务器支持,允许应用程序充当授权服务器。它作用于 OAuth2 授权服务器模块。2. 方法安全性注解@PreAuthorize, @PostAuthorize, @Secured, @RolesAllowed, @DenyAll, @permitAll, @authenticated, @FullyAuthenticated, @HasAuthority, @HasAnyAuthority, @HasRole, @HasAnyRole: 这些注解用于控制方法级别的安全性。它们作用于方法安全性模块,允许开发者基于不同的条件和表达式来限制对特定方法的访问。3. 方法参数绑定@AuthenticationPrincipal, @CurrentSecurityContext, @RequestHeader, @CookieValue, @SessionAttribute: 这些注解用于从 HTTP 请求中提取信息并将其绑定到方法参数。它们作用于请求处理模块,允许开发者方便地访问请求相关的数据。4. 密码编码@PasswordEncode: 这个注解(如果存在)可能用于标记密码字段,指示 Spring Security 在保存用户信息时需要对密码进行编码。它作用于用户认证和密码管理模块。5. 其他@NoCache: 用于防止 Spring Security 的某些安全决策结果被缓存。它作用于 HTTP 响应和缓存控制模块。

相关文章

电锅蒸米饭的做法
长藤鬼校吓死过人,只是很真实的恐怖鬼屋罢了(没吓死过人)
将java对象转换为json字符串的几种常用方法
lol 剑圣皮肤都有什么 多少钱 简单说下皮肤特征 3q
拳皇97防御按哪个键
电饭煲煮饭容易焦的原因有什么