浅谈SpringSecurity重写默认配置
作者:@来杯咖啡
这篇文章主要介绍了SpringSecurity重写默认配置,包括注入Bean、扩展WebSecurityConfigurerAdapter、重写端点授权配置及实现AuthenticationProvider,感兴趣的可以了解一下
重写UserDetailService组件
1.注入Bean的方式
/** * @author: coffee * @date: 2024/6/22 21:22 * @description: 重写springsecurity默认组件:注入Bean的方式 */ @Configuration public class ProjectConfig { /** * 重写userDetailsService组件 */ @Bean public UserDetailsService userDetailsService () { // InMemoryUserDetailsManager实现并不适用生成环境,此处进作为demo使用 InMemoryUserDetailsManager userDetailsService = new InMemoryUserDetailsManager(); // 使用指定用户名、密码和权限列表构建用户 UserDetails user = User.withUsername("john").password("12345").authorities("read").build(); // 添加该用户以便让UserDetailsService对其进行管理 userDetailsService.createUser(user); return userDetailsService; } /** * 重写UserDetailsService组件也必须重写PasswordEncoder组件,否则会报: * java.lang.IllegalArgumentException: There is no PasswordEncoder mapped for the id "null" */ @Bean public PasswordEncoder passwordEncoder () { // NoOpPasswordEncoder实例会将密码视为普通文本,他不会对密码进行加密或者hash处理 return NoOpPasswordEncoder.getInstance(); } }
2.扩展WebSecurityConfigurerAdapter
/** * @author: coffee * @date: 2024/6/22 21:46 * @description: */ @Configuration public class ProjectConfig2 extends WebSecurityConfigurerAdapter { /** * 重写端点授权配置,就需要扩展WebSecurityConfigurerAdapter类,可以使用HttpSecurity对象的不同方法更改配置 */ @Override protected void configure (HttpSecurity httpSecurity) throws Exception { httpSecurity.httpBasic(); // 所有请求都需要身份验证 // httpSecurity.authorizeRequests().anyRequest().authenticated(); // permitAll()方法修改授权配置,无需凭据(用户名密码)也可以直接调用接口。 curl http://localhost:8080/hello httpSecurity.authorizeRequests().anyRequest().permitAll(); } /** * 重写springsecurity默认组件:继承WebSecurityConfigurerAdapter的方式 */ @Override protected void configure (AuthenticationManagerBuilder auth) throws Exception { // InMemoryUserDetailsManager实现并不适用生成环境,此处进作为demo使用 InMemoryUserDetailsManager userDetailsService = new InMemoryUserDetailsManager(); // 使用指定用户名、密码和权限列表构建用户 UserDetails user = User.withUsername("john").password("12345").authorities("read").build(); // 添加该用户以便让UserDetailsService对其进行管理 userDetailsService.createUser(user); // AuthenticationManagerBuilder调用userDetailsService()方法来注册UserDetailsService实例 // AuthenticationManagerBuilder调用passwordEncoder()方法来注册NoOpPasswordEncoder实例 auth.userDetailsService(userDetailsService).passwordEncoder(NoOpPasswordEncoder.getInstance()); } }
重写端点授权配置
/** * @author: coffee * @date: 2024/6/22 21:46 * @description: */ @Configuration public class ProjectConfig2 extends WebSecurityConfigurerAdapter { /** * 重写端点授权配置,就需要扩展WebSecurityConfigurerAdapter类,可以使用HttpSecurity对象的不同方法更改配置 */ @Override protected void configure (HttpSecurity httpSecurity) throws Exception { httpSecurity.httpBasic(); // 所有请求都需要身份验证 // httpSecurity.authorizeRequests().anyRequest().authenticated(); // permitAll()方法修改授权配置,无需凭据(用户名密码)也可以直接调用接口。 curl http://localhost:8080/hello httpSecurity.authorizeRequests().anyRequest().permitAll(); } }
重写AuthenticationProvider实现
/** * @author: coffee * @date: 2024/6/22 22:15 * @description: ... */ @Component public class CustomAuthenticationProvider implements AuthenticationProvider { @Override public Authentication authenticate(Authentication authentication) throws AuthenticationException { String userName = authentication.getName(); String password = String.valueOf(authentication.getCredentials()); // 重写身份验证提供者,用if else 替换 UserDetailsService和PasswordEncoder if ("john".equals(userName) && "12345".equals(password)) { return new UsernamePasswordAuthenticationToken(userName, password, Arrays.asList()); } else { throw new AuthenticationCredentialsNotFoundException("ERROR"); } } @Override public boolean supports(Class<?> authentication) { return UsernamePasswordAuthenticationToken.class.isAssignableFrom(authentication); } }
/** * @author: coffee * @date: 2024/6/22 21:46 * @description: */ @Configuration public class ProjectConfig2 extends WebSecurityConfigurerAdapter { @Autowired private CustomAuthenticationProvider customAuthenticationProvider; /** * 重写端点授权配置,就需要扩展WebSecurityConfigurerAdapter类,可以使用HttpSecurity对象的不同方法更改配置 */ @Override protected void configure (HttpSecurity httpSecurity) throws Exception { httpSecurity.httpBasic(); // 所有请求都需要身份验证 httpSecurity.authorizeRequests().anyRequest().authenticated(); } /** * 重写身份验证提供者 */ @Override protected void configure (AuthenticationManagerBuilder auth) throws Exception { auth.authenticationProvider(customAuthenticationProvider); } }
到此这篇关于浅谈SpringSecurity重写默认配置的文章就介绍到这了,更多相关SpringSecurity重写默认配置内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!