解決spring?security?loginProcessingUrl無效問題
spring security loginProcessingUrl無效
近幾天被一個(gè)朋友問道了一個(gè)loginProcessingUrl設(shè)置后無效的問題。
他的登陸頁面的接口是 /loginpage
這個(gè)前端頁面的登陸按鈕請(qǐng)求的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層寫了一個(gè)與前端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)這個(gè)接口無論如何都不會(huì)調(diào)用,我仔細(xì)觀察了他的security的配置有沒有問題,發(fā)現(xiàn)也沒有
此時(shí)的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就應(yīng)該在點(diǎn)擊登陸按鈕的是去請(qǐng)求我們自己寫的/login/doLogin
這個(gè)接口,但是事實(shí)是沒有。
原因是什么呢
原因是security根本不會(huì)去請(qǐng)求我們自己寫的/login/doLogin
這個(gè)接口,
loginProcessingUrl的作用是用來攔截前端頁面對(duì)/login/doLogin
這個(gè)的請(qǐng)求的,攔截到了就走它自己的處理流程(例如這個(gè)UserDetailsService
的loadUserByUsername
這個(gè)方法,UserDetailsService是security的提供的一個(gè)接口,一般我們開發(fā)的時(shí)候需要去實(shí)現(xiàn)這個(gè)接口),所有我們自己后端寫的/login/doLogin
這個(gè)接口有寫跟沒寫是一樣的。
所以我后來直接叫他不去設(shè)置loginProcessingUrl這個(gè)值了,然后前端登陸頁面的form表單的action=""就行
至于后端接口怎么獲取當(dāng)前登陸的用戶信息
請(qǐng)看下面代碼
//UserDetails是security提供的一個(gè)接口,一般實(shí)體類的用戶需要去實(shí)現(xiàn)它, UserDetails admin = (UserDetails)SecurityContextHolder.getContext().getAuthentication().getPrincipal(); //我朋友的實(shí)體類叫Admin,于是下面這一句也是可以的 Admin a = (Admin)admin;
實(shí)體類部分代碼如下
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é)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
java多線程數(shù)據(jù)分頁處理實(shí)例講解
在本篇內(nèi)容里小編給大家分享了一篇關(guān)于java多線程數(shù)據(jù)分頁處理實(shí)例講解內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。2021-01-01Thymeleaf 3.0 自定義標(biāo)簽方言屬性的實(shí)例講解
這篇文章主要介紹了Thymeleaf 3.0 自定義標(biāo)簽方言屬性的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-09-09Spring?Boot項(xiàng)目如何優(yōu)雅實(shí)現(xiàn)Excel導(dǎo)入與導(dǎo)出功能
在我們平時(shí)工作中經(jīng)常會(huì)遇到要操作Excel的功能,比如導(dǎo)出個(gè)用戶信息或者訂單信息的Excel報(bào)表,下面這篇文章主要給大家介紹了關(guān)于Spring?Boot項(xiàng)目中如何優(yōu)雅實(shí)現(xiàn)Excel導(dǎo)入與導(dǎo)出功能的相關(guān)資料,需要的朋友可以參考下2022-06-06如何解決websocket開啟多個(gè)頁面訪問同一個(gè)連接會(huì)失效的問題
使用WebSocket時(shí),若多個(gè)頁面訪問同一個(gè)WebSocket連接可能會(huì)導(dǎo)致連接失效,遇到這個(gè)問題時(shí),可以通過在SpringBoot中使用@ServerEndpoint注解并添加@Component來解決,出現(xiàn)連接錯(cuò)誤通常是因?yàn)閃ebSocket連接接收到的是一個(gè)GET請(qǐng)求2024-09-09SpringBoot JPA懶加載失效的解決方案(親測(cè)有效)
這篇文章主要介紹了SpringBoot JPA懶加載失效的解決方案(親測(cè)有效),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08使用SpringBoot實(shí)現(xiàn)微服務(wù)超時(shí)重試模式的示例
這篇文章主要介紹了使用SpringBoot實(shí)現(xiàn)微服務(wù)超時(shí)重試模式的示例,幫助大家更好的理解和使用springboot框架,感興趣的朋友可以了解下2020-11-11