淺談SpringSecurity重寫(xiě)默認(rèn)配置
重寫(xiě)UserDetailService組件
1.注入Bean的方式
/**
* @author: coffee
* @date: 2024/6/22 21:22
* @description: 重寫(xiě)springsecurity默認(rèn)組件:注入Bean的方式
*/
@Configuration
public class ProjectConfig {
/**
* 重寫(xiě)userDetailsService組件
*/
@Bean
public UserDetailsService userDetailsService () {
// InMemoryUserDetailsManager實(shí)現(xiàn)并不適用生成環(huán)境,此處進(jìn)作為demo使用
InMemoryUserDetailsManager userDetailsService = new InMemoryUserDetailsManager();
// 使用指定用戶名、密碼和權(quán)限列表構(gòu)建用戶
UserDetails user = User.withUsername("john").password("12345").authorities("read").build();
// 添加該用戶以便讓UserDetailsService對(duì)其進(jìn)行管理
userDetailsService.createUser(user);
return userDetailsService;
}
/**
* 重寫(xiě)UserDetailsService組件也必須重寫(xiě)PasswordEncoder組件,否則會(huì)報(bào):
* java.lang.IllegalArgumentException: There is no PasswordEncoder mapped for the id "null"
*/
@Bean
public PasswordEncoder passwordEncoder () {
// NoOpPasswordEncoder實(shí)例會(huì)將密碼視為普通文本,他不會(huì)對(duì)密碼進(jìn)行加密或者h(yuǎn)ash處理
return NoOpPasswordEncoder.getInstance();
}
}
2.擴(kuò)展WebSecurityConfigurerAdapter
/**
* @author: coffee
* @date: 2024/6/22 21:46
* @description:
*/
@Configuration
public class ProjectConfig2 extends WebSecurityConfigurerAdapter {
/**
* 重寫(xiě)端點(diǎn)授權(quán)配置,就需要擴(kuò)展WebSecurityConfigurerAdapter類(lèi),可以使用HttpSecurity對(duì)象的不同方法更改配置
*/
@Override
protected void configure (HttpSecurity httpSecurity) throws Exception {
httpSecurity.httpBasic();
// 所有請(qǐng)求都需要身份驗(yàn)證
// httpSecurity.authorizeRequests().anyRequest().authenticated();
// permitAll()方法修改授權(quán)配置,無(wú)需憑據(jù)(用戶名密碼)也可以直接調(diào)用接口。 curl http://localhost:8080/hello
httpSecurity.authorizeRequests().anyRequest().permitAll();
}
/**
* 重寫(xiě)springsecurity默認(rèn)組件:繼承WebSecurityConfigurerAdapter的方式
*/
@Override
protected void configure (AuthenticationManagerBuilder auth) throws Exception {
// InMemoryUserDetailsManager實(shí)現(xiàn)并不適用生成環(huán)境,此處進(jìn)作為demo使用
InMemoryUserDetailsManager userDetailsService = new InMemoryUserDetailsManager();
// 使用指定用戶名、密碼和權(quán)限列表構(gòu)建用戶
UserDetails user = User.withUsername("john").password("12345").authorities("read").build();
// 添加該用戶以便讓UserDetailsService對(duì)其進(jìn)行管理
userDetailsService.createUser(user);
// AuthenticationManagerBuilder調(diào)用userDetailsService()方法來(lái)注冊(cè)UserDetailsService實(shí)例
// AuthenticationManagerBuilder調(diào)用passwordEncoder()方法來(lái)注冊(cè)NoOpPasswordEncoder實(shí)例
auth.userDetailsService(userDetailsService).passwordEncoder(NoOpPasswordEncoder.getInstance());
}
}重寫(xiě)端點(diǎn)授權(quán)配置
/**
* @author: coffee
* @date: 2024/6/22 21:46
* @description:
*/
@Configuration
public class ProjectConfig2 extends WebSecurityConfigurerAdapter {
/**
* 重寫(xiě)端點(diǎn)授權(quán)配置,就需要擴(kuò)展WebSecurityConfigurerAdapter類(lèi),可以使用HttpSecurity對(duì)象的不同方法更改配置
*/
@Override
protected void configure (HttpSecurity httpSecurity) throws Exception {
httpSecurity.httpBasic();
// 所有請(qǐng)求都需要身份驗(yàn)證
// httpSecurity.authorizeRequests().anyRequest().authenticated();
// permitAll()方法修改授權(quán)配置,無(wú)需憑據(jù)(用戶名密碼)也可以直接調(diào)用接口。 curl http://localhost:8080/hello
httpSecurity.authorizeRequests().anyRequest().permitAll();
}
}重寫(xiě)AuthenticationProvider實(shí)現(xiàn)
/**
* @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());
// 重寫(xiě)身份驗(yàn)證提供者,用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;
/**
* 重寫(xiě)端點(diǎn)授權(quán)配置,就需要擴(kuò)展WebSecurityConfigurerAdapter類(lèi),可以使用HttpSecurity對(duì)象的不同方法更改配置
*/
@Override
protected void configure (HttpSecurity httpSecurity) throws Exception {
httpSecurity.httpBasic();
// 所有請(qǐng)求都需要身份驗(yàn)證
httpSecurity.authorizeRequests().anyRequest().authenticated();
}
/**
* 重寫(xiě)身份驗(yàn)證提供者
*/
@Override
protected void configure (AuthenticationManagerBuilder auth) throws Exception {
auth.authenticationProvider(customAuthenticationProvider);
}
}到此這篇關(guān)于淺談SpringSecurity重寫(xiě)默認(rèn)配置的文章就介紹到這了,更多相關(guān)SpringSecurity重寫(xiě)默認(rèn)配置內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
springBoot整合rabbitmq測(cè)試常用模型小結(jié)
這篇文章主要介紹了springBoot整合rabbitmq并測(cè)試五種常用模型,本文主要針對(duì)前五種常用模型,在spirngboot框架的基礎(chǔ)上整合rabbitmq并進(jìn)行測(cè)試使用,需要的朋友可以參考下2022-01-01
詳解spring security四種實(shí)現(xiàn)方式
這篇文章主要介紹了詳解spring security四種實(shí)現(xiàn)方式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11
SpringBoot全局異常處理之多個(gè)處理器匹配順序(最新推薦)
這篇文章主要介紹了SpringBoot全局異常處理之多個(gè)處理器匹配順序(最新推薦),調(diào)試源碼可見(jiàn)匹配順序?yàn)椋寒惓蛹?jí)高者優(yōu)先,再清楚點(diǎn),子類(lèi)異常處理器優(yōu)先,本文給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧2024-03-03
通過(guò)實(shí)例解析Spring argNames屬性
這篇文章主要介紹了通過(guò)實(shí)例解析Spring argNames屬性,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11
mybatis中的if?test判斷入?yún)⒌闹祮?wèn)題
這篇文章主要介紹了mybatis中的if?test判斷入?yún)⒌闹祮?wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-06-06
SpringSecurity rememberme功能實(shí)現(xiàn)過(guò)程解析
這篇文章主要介紹了SpringSecurity rememberme功能實(shí)現(xiàn)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03

