解決spring?security?loginProcessingUrl無效問題
spring security loginProcessingUrl無效
近幾天被一個朋友問道了一個loginProcessingUrl設置后無效的問題。
他的登陸頁面的接口是 /loginpage 這個前端頁面的登陸按鈕請求的url是 /login/doLogin
前端頁面代碼如下:
<form action="/login/doLogin" method="post">
<input type="text" name="username" />
<input type="password" name="password"/>
<button type="submit">登陸</button>
</form>然后他在后端代碼的的controller層寫了一個與前端action相同的接口
代碼如下:
@RequestMapping(value = "/login/doLogin",method = RequestMethod.POST)
@ResponseBody
public Object adminlogindologin(String username,String password){
System.out.println(username);
System.out.println(password);
return "成功";
}然后他發(fā)現(xiàn)這個接口無論如何都不會調(diào)用,我仔細觀察了他的security的配置有沒有問題,發(fā)現(xiàn)也沒有
此時的security配置代碼如下:
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.formLogin().loginProcessingUrl("/login/doLogin")
.loginPage("/login")
.defaultSuccessUrl("/admin/login123")
.permitAll() // 開啟表單登錄并配置登錄接口
.and()
.authorizeRequests() // 開啟 HttpSecurity 配置
.antMatchers("/admin/login","/login/doLogin")
.permitAll()
.antMatchers("/admin/**").hasRole("admin")// admin/**
.and().csrf().disable(); // 關(guān)閉csrf
}按照我的想法和他的想法配置了loginProcessingUrl就應該在點擊登陸按鈕的是去請求我們自己寫的/login/doLogin這個接口,但是事實是沒有。
原因是什么呢
原因是security根本不會去請求我們自己寫的/login/doLogin這個接口,
loginProcessingUrl的作用是用來攔截前端頁面對/login/doLogin這個的請求的,攔截到了就走它自己的處理流程(例如這個UserDetailsService的loadUserByUsername這個方法,UserDetailsService是security的提供的一個接口,一般我們開發(fā)的時候需要去實現(xiàn)這個接口),所有我們自己后端寫的/login/doLogin這個接口有寫跟沒寫是一樣的。
所以我后來直接叫他不去設置loginProcessingUrl這個值了,然后前端登陸頁面的form表單的action=""就行
至于后端接口怎么獲取當前登陸的用戶信息
請看下面代碼
//UserDetails是security提供的一個接口,一般實體類的用戶需要去實現(xiàn)它, UserDetails admin = (UserDetails)SecurityContextHolder.getContext().getAuthentication().getPrincipal(); //我朋友的實體類叫Admin,于是下面這一句也是可以的 Admin a = (Admin)admin;
實體類部分代碼如下
public class Admin implements UserDetails {
private Integer admin_id/*管理員ID*/;
private String admin_name/*管理員登錄名*/;
private String admin_nickname/*管理員昵稱*/;
private String admin_password/*管理員密碼*/;
//省略get/set方法
}總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Spring?Boot項目如何優(yōu)雅實現(xiàn)Excel導入與導出功能
在我們平時工作中經(jīng)常會遇到要操作Excel的功能,比如導出個用戶信息或者訂單信息的Excel報表,下面這篇文章主要給大家介紹了關(guān)于Spring?Boot項目中如何優(yōu)雅實現(xiàn)Excel導入與導出功能的相關(guān)資料,需要的朋友可以參考下2022-06-06
如何解決websocket開啟多個頁面訪問同一個連接會失效的問題
使用WebSocket時,若多個頁面訪問同一個WebSocket連接可能會導致連接失效,遇到這個問題時,可以通過在SpringBoot中使用@ServerEndpoint注解并添加@Component來解決,出現(xiàn)連接錯誤通常是因為WebSocket連接接收到的是一個GET請求2024-09-09
SpringBoot JPA懶加載失效的解決方案(親測有效)
這篇文章主要介紹了SpringBoot JPA懶加載失效的解決方案(親測有效),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-08-08
使用SpringBoot實現(xiàn)微服務超時重試模式的示例
這篇文章主要介紹了使用SpringBoot實現(xiàn)微服務超時重試模式的示例,幫助大家更好的理解和使用springboot框架,感興趣的朋友可以了解下2020-11-11

