Spring Boot下Spring Security权限认证@PreAuthorize注解失效 拼搏现实的明天。 2022-09-02 00:49 659阅读 0赞 # Spring Boot下Spring Security权限认证@PreAuthorize注解失效 # 根据我的经历,一共有三种情况。如果谁还遇到其他情况可以提出来。 ## 第一种情况。 ## 就是网上大量出现的。没有添加 **@EnableGlobalMethodSecurity** 注解。 还有 **@EnableGlobalMethodSecurity** 注解只能添加在继承了**WebSecurityConfigurerAdapter** 的类上面。 package com.jiang.login.config; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; /** * SecurityConfig 登录认证的配置 * * @创建人 江枫沐雪 * @创建时间 2021/7/16 9:09 */ @EnableWebSecurity @EnableGlobalMethodSecurity(prePostEnabled = true) public class SecurityConfig extends WebSecurityConfigurerAdapter { @Autowired @Qualifier("myUserDetailsService") private UserDetailsService userDetailsService; @Autowired private BCryptPasswordEncoder bCryptPasswordEncoder; //查询用户信息 @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { //用户详情信息 auth.userDetailsService(userDetailsService) //密码加密方式 .passwordEncoder(bCryptPasswordEncoder); } //安全拦截机制 @Override protected void configure(HttpSecurity http) throws Exception { // @formatter:off http //配置跨域请求 并且 关闭打开的csrf保护 .cors().and() .csrf().disable() // 认证配置 .authorizeRequests() // 登录验证等放行 .antMatchers("/auth/**","/app/**").permitAll() // .antMatchers("/per/get").hasAuthority("GET_PER") // .antMatchers("/per/getPer").hasAuthority("GET_PER") // .antMatchers("/per/getPer").access("hasRole('ROlE_GET')") // 剩下的接口都需要登陆后访问 .anyRequest().authenticated() .and() //表单登录 .formLogin() // 用户未登录的的时候跳转的这个路径 .loginPage("/home") // 用户登录时,用户名、密码提交的目的路径 .loginProcessingUrl("/login") // 用户成功登录以后 .successForwardUrl("/success") .and() .logout() .logoutUrl("/logout"); // .logoutSuccessUrl("/log") } } ## 第二种情况 ## 就是,你的 **@PreAuthorize** 注解使用的角色授权,不是资源(权限)授权。 ### @PreAuthorize(“hasRole(‘USER’)”) ### 因为你使用的是角色授权,所以Spring Security会自动在你设置的参数前加上一个**ROLE\_**,那么你在添加角色权限的时候传递的差数是**ROLE\_USER**。 例如: UserDetails userDetails = User.withUsername(user.getUsername()) .password(user.getPassword()).roles("ROLE_USER"); ## 第三种情况 ## 这是我遇见非常诡异的情况。 **@PreAuthorize(“hasAuthority(‘GET\_PER’)”)** 不能生效。 首先我创建了一个LoginController的controller文件,然后在创建了一个测试接口 /** * Lonig * * @创建人 江枫沐雪 * @创建时间 2021/7/26 14:37 */ @RestController public class LoginController { @PostMapping("/per/get") @PreAuthorize("hasAuthority('GET_PER')") private String getPerm(){ return "拥有权限!"; } } 但这个测试接口无论如何都无法拦截,但我使用**web方法**授权就可以。 我调了几个小时,依然没有解决。 但神奇的事情来了。 我又创建了一个controller类**RoleController** 在他下面重新写了一个普通的查询方法,竟然可以拦截。 于是,我就又在**RoleController**重新写了一个普通的测试接口,结果成功拦击。 o((⊙﹏⊙))o 当时,我已经懵了!!! 最后,我想是不是我**LoginController**有问题,我就把**LoginController**中的方法粘贴复制了过来,发现不能拦截!!! @RestController @RequestMapping("role") public class RoleController { @Autowired private RoleService roleService; // @GetMapping("get") @PreAuthorize("hasAuthority('GET_ROLE')") public ApiResponse getRole(){ return ApiResponseWithData.ofSuccess(roleService.getRole()); } // @GetMapping("permin") @PreAuthorize("hasAuthority('GET_PERMIN')") public string getPerMin(){ return "真的好神奇!"; } //从LoginController中粘贴复制过了,但依然不能拦截 @PostMapping("/per") @PreAuthorize("hasAuthority('GET_PER')") private string getPer(){ return "拥有权限!"; } } 最后,我放弃寻找原因,因为其他的都可以权限控制。
相关 Spring Security 导致 Spring Boot 跨域失效问题 1、CORS 是什么 首先我们要明确,CORS 是什么,以及规范是如何要求的。这里只是梳理一下流程。 CORS 全称是 Cross-Origin Resource Sh 「爱情、让人受尽委屈。」/ 2024年03月30日 16:36/ 0 赞/ 67 阅读
相关 Spring Security 6.0(spring boot 3.0) 下认证配置流程 目录 前提 将要实现的功能 依赖(POM) 示例代码 基础组件 验证码 MyUserDeta 水深无声/ 2024年03月30日 08:44/ 0 赞/ 53 阅读
相关 Spring Boot、Spring Security、Oauth2实现的权限控制和认证服务 Spring Boot、Spring Security、Oauth2实现的权限控制和认证服务 > 基于Spring Boot、Spring Security、Oauth2 秒速五厘米/ 2024年03月27日 18:00/ 0 赞/ 51 阅读
相关 Spring Boot 集成权限管理Spring Security框架 在本文中,我们将讨论如何在Spring Boot项目中集成权限管理。我们将使用Spring Security框架,这是一个专门用于实现安全性功能的框架,包括认证和授权。 一 柔光的暖阳◎/ 2023年10月13日 20:47/ 0 赞/ 65 阅读
相关 Spring Security权限认证管理 针对项目的安全管理,Spring家族提供了安全框架Spring Security,它是一个基于Spring生态圈的,用于提供安全访问控制解决方案的框架。 Spring Sec 朱雀/ 2023年02月18日 03:19/ 0 赞/ 5 阅读
相关 Spring Boot下Spring Security权限认证@PreAuthorize注解失效 Spring Boot下Spring Security权限认证@PreAuthorize注解失效 根据我的经历,一共有三种情况。如果谁还遇到其他情况可以提出来。 第一 拼搏现实的明天。/ 2022年09月02日 00:49/ 0 赞/ 660 阅读
相关 spring boot注解@Transactional失效 引言 数据库事务,将有限系列的执行命令作为单个逻辑执行单元,单元内的任务要么全部成功,要么全部失败。 起因 由于业务逻辑需要,操作要么 你的名字/ 2022年05月16日 10:18/ 0 赞/ 274 阅读
相关 Spring Security 小记 - @Secured(), @PreAuthorize() 及 @RolesAllowed() 目录 Spring Security 小记 前言 权限注解 小坑 Spring Security 小记 记录一下Sp 墨蓝/ 2022年05月12日 13:18/ 0 赞/ 199 阅读
相关 spring-boot+Spring-security+jwt控制权限 本权限基于spring boot + spring security + jwt 进行权限控制,用户登录和实际权限部分,本例固定在初始化中。username + 123456 我不是女神ヾ/ 2022年01月14日 12:13/ 0 赞/ 234 阅读
相关 Spring Boot 整合 Spring Security 示例实现前后分离权限注解 + JWT 登录认证 点击上方 [Java后端][Java],选择 设为星标 优质文章,及时送达 -------------------- 一.说明 SpringSecurity是一个 绝地灬酷狼/ 2021年08月28日 14:17/ 0 赞/ 246 阅读