解決spring?security?loginProcessingUrl無效問題
spring security loginProcessingUrl無效
近幾天被一個(gè)朋友問道了一個(gè)loginProcessingUrl設(shè)置后無效的問題。
他的登陸頁(yè)面的接口是 /loginpage 這個(gè)前端頁(yè)面的登陸按鈕請(qǐng)求的url是 /login/doLogin
前端頁(yè)面代碼如下:
<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的作用是用來攔截前端頁(yè)面對(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è)值了,然后前端登陸頁(yè)面的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ù)分頁(yè)處理實(shí)例講解
在本篇內(nèi)容里小編給大家分享了一篇關(guān)于java多線程數(shù)據(jù)分頁(yè)處理實(shí)例講解內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。2021-01-01
Thymeleaf 3.0 自定義標(biāo)簽方言屬性的實(shí)例講解
這篇文章主要介紹了Thymeleaf 3.0 自定義標(biāo)簽方言屬性的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-09-09
Spring?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è)頁(yè)面訪問同一個(gè)連接會(huì)失效的問題
使用WebSocket時(shí),若多個(gè)頁(yè)面訪問同一個(gè)WebSocket連接可能會(huì)導(dǎo)致連接失效,遇到這個(gè)問題時(shí),可以通過在SpringBoot中使用@ServerEndpoint注解并添加@Component來解決,出現(xiàn)連接錯(cuò)誤通常是因?yàn)閃ebSocket連接接收到的是一個(gè)GET請(qǐng)求2024-09-09
SpringBoot 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

