解決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)這個接口無論如何都不會調用,我仔細觀察了他的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(); // 關閉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方法 }
總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Spring?Boot項目如何優(yōu)雅實現(xiàn)Excel導入與導出功能
在我們平時工作中經常會遇到要操作Excel的功能,比如導出個用戶信息或者訂單信息的Excel報表,下面這篇文章主要給大家介紹了關于Spring?Boot項目中如何優(yōu)雅實現(xiàn)Excel導入與導出功能的相關資料,需要的朋友可以參考下2022-06-06如何解決websocket開啟多個頁面訪問同一個連接會失效的問題
使用WebSocket時,若多個頁面訪問同一個WebSocket連接可能會導致連接失效,遇到這個問題時,可以通過在SpringBoot中使用@ServerEndpoint注解并添加@Component來解決,出現(xiàn)連接錯誤通常是因為WebSocket連接接收到的是一個GET請求2024-09-09SpringBoot JPA懶加載失效的解決方案(親測有效)
這篇文章主要介紹了SpringBoot JPA懶加載失效的解決方案(親測有效),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-08-08使用SpringBoot實現(xiàn)微服務超時重試模式的示例
這篇文章主要介紹了使用SpringBoot實現(xiàn)微服務超時重試模式的示例,幫助大家更好的理解和使用springboot框架,感興趣的朋友可以了解下2020-11-11