SpringBoot使用Spring Security實現(xiàn)登錄注銷功能
1.首先看下我的項目結(jié)構(gòu)

我們逐個講解
/**
* 用戶登錄配置類
* @author Administrator
*
*/
public class AdminUserDateils implements UserDetails {
private static final long serialVersionUID = -1546619839676530441L;
private transient YCAdmin yCAdmin;
public AdminUserDateils() {
}
public AdminUserDateils(YCAdmin yCAdmin) {
if (yCAdmin != null) {
this.yCAdmin = yCAdmin;
}
}
public YCAdmin getyCAdmin() {
return yCAdmin;
}
public void setyCAdmin(YCAdmin yCAdmin) {
this.yCAdmin = yCAdmin;
}
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
Collection<GrantedAuthority> authorities = new ArrayList<>();
SimpleGrantedAuthority authority = new SimpleGrantedAuthority("admin");
authorities.add(authority);
return authorities;
}
//用戶名密碼
@Override
public String getPassword() {
return yCAdmin.getAdminPassword();
}
//賬號
@Override
public String getUsername() {
return yCAdmin.getAdminAccount();
}
@Override
public boolean isAccountNonExpired() {
return true;
}
@Override
public boolean isAccountNonLocked() {
return true;
}
@Override
public boolean isCredentialsNonExpired() {
return true;
}
@Override
public boolean isEnabled() {
return true;
}
}
首先以上AdminUserDateils類是配置用戶登錄成功后,來存儲用戶登錄的信息
/**
* Spring-Security
* @author Administrator
*
*/
@Service
public class AdminCustomerDetailsService implements UserDetailsService{
@Autowired
private YCAdminMapper yCAdminMapper;
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
YCAdmin ycAdmin= yCAdminMapper.selectYCAdminByAccount(username);
if(ycAdmin==null) {
throw new UsernameNotFoundException("未找到該用戶??!");
}
//配置的AdminUserDateils
AdminUserDateils adminUserDateils = new AdminUserDateils(ycAdmin);
return adminUserDateils;
}
}
以上AdminCustomerDetailsService是根據(jù)查找用戶名的,需要實現(xiàn)UserDetailsService接口的loadUserByUsername的方法也就是會找用戶名,這個根據(jù)mapper層,也就是數(shù)據(jù)庫查找,返回只也就是剛才配置的AdminUserDateils類
public class YhPasswordEncoder implements PasswordEncoder{
@Override
public String encode(CharSequence rawPassword) {
return Des3.encrypt(rawPassword.toString());
}
@Override
public boolean matches(CharSequence rawPassword, String encodedPassword) {
// TODO Auto-generated method stub
return encode(rawPassword).equals(encodedPassword);
}
}
以上YhPasswordEncoder 需要繼承是我們PasswordEncoder配置用戶密碼加密的,這里的加密可以按照自己業(yè)務需求來使用加密,按照這樣換一種加密類型就可以了。
public class AdminSecurityConfiguration {
@Configuration
@Order(2)
@EnableWebSecurity
public static class ClientSecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private AdminCustomerDetailsService adminCustomerDetailsService;
@Value("${yunhui.admin.urlContext:/houtai}")
private String adminUrlContext;
@Value("${yunhui.admin.noLoginUrls:}")
private String noLoginUrls;
@Override
protected void configure(HttpSecurity http) throws Exception {
//循環(huán)獲取用戶不需要驗證url(這里是記錄在yml)
List<String> clientNoLoginUrls = new ArrayList<String>();
if (!noLoginUrls.isEmpty()) {
for (String s : noLoginUrls.split(",")) {
clientNoLoginUrls.add(adminUrlContext + s);
}
}
http.
//需要驗證登錄的url
antMatcher(adminUrlContext + "/**").authorizeRequests()
//不需登錄驗證的url
.antMatchers(clientNoLoginUrls.toArray(new String[0])).permitAll()
.anyRequest().authenticated().and()
//開啟表單驗證
.formLogin().
//驗證登錄的url
loginProcessingUrl("/houtai/login")
//登錄的頁面
.loginPage("/houtai/login")
//登錄成功后跳轉(zhuǎn)
.defaultSuccessUrl("/houtai").permitAll().and()
//注銷登錄的url
.logout().logoutUrl("/houtai/loginout")
//注銷之后跳轉(zhuǎn)的頁面
.logoutSuccessUrl("/houtai")
.and().rememberMe().and().csrf().disable();;
}
@Override
public void configure(AuthenticationManagerBuilder auth) throws Exception {
//需要哪個service,和驗證密碼的方式,剛才我們都配置了
auth.userDetailsService(adminCustomerDetailsService).passwordEncoder(new YhPasswordEncoder());
}
}
最后就是配置首先開啟
@Configuration
@EnableWebSecurity
的注解

一個是我們剛才配置的service
其他兩個兩個變量是在配置文件配置的

最后配置我們表單驗證就可以了input的name必須是username和password,除非重新配置了,
action="/houtai/login"就是直接這樣就可以實現(xiàn)登錄了

如果有HttpSecurity配置的細節(jié)問題可以提問
補充可以自己配置登錄成功和失敗類

到此這篇關于SpringBoot使用Spring Security實現(xiàn)登錄注銷功能的文章就介紹到這了,更多相關Spring Security登錄注銷內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
- 詳解springboot?springsecuroty中的注銷和權(quán)限控制問題
- SpringBoot--- SpringSecurity進行注銷權(quán)限控制的配置方法
- Vue+springboot批量刪除功能實現(xiàn)代碼
- springboot和vue前后端交互的實現(xiàn)示例
- SpringBoot3結(jié)合Vue3實現(xiàn)用戶登錄功能
- 基于SpringBoot和Vue3的博客平臺的用戶注冊與登錄功能實現(xiàn)
- SpringBoot和Vue.js實現(xiàn)的前后端分離的用戶權(quán)限管理系統(tǒng)
- 詳解SpringBoot項目整合Vue做一個完整的用戶注冊功能
- Vue結(jié)合Springboot實現(xiàn)用戶列表單頁面(前后端分離)
- vue+springboot用戶注銷功能實現(xiàn)代碼
相關文章
Java中Hashtable類與HashMap類的區(qū)別詳解
Hashtable的應用非常廣泛,HashMap是新框架中用來代替Hashtable的類,也就是說建議使用HashMap,不要使用Hashtable??赡苣阌X得Hashtable很好用,為什么不用呢?這里簡單分析他們的區(qū)別。2016-01-01
自主配置數(shù)據(jù)源,mybatis/plus不打印sql日志問題
這篇文章主要介紹了自主配置數(shù)據(jù)源,mybatis/plus不打印sql日志問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-12-12
SpringBoot?AOP統(tǒng)一處理Web請求日志的示例代碼
springboot有很多方法處理日志,例如攔截器,aop切面,service中代碼記錄等,下面這篇文章主要給大家介紹了關于SpringBoot?AOP統(tǒng)一處理Web請求日志的相關資料,需要的朋友可以參考下2023-02-02
Shiro與Springboot整合開發(fā)的基本步驟過程詳解
這篇文章主要介紹了Shiro與Springboot整合開發(fā)的基本步驟,本文結(jié)合實例代碼給大家介紹整合過程,感興趣的朋友跟隨小編一起看看吧2023-06-06
淺談一下RabbitMQ、Kafka和RocketMQ消息中間件對比
這篇文章主要介紹了淺談一下RabbitMQ、Kafka和RocketMQ消息中間件對比,消息中間件屬于分布式系統(tǒng)中一個字系統(tǒng),關注于數(shù)據(jù)的發(fā)送和接收,利用高效可靠的異步信息傳遞機制對分布式系統(tǒng)中的其余各個子系統(tǒng)進行集成,需要的朋友可以參考下2023-05-05

