關(guān)于spring-security(記住密碼,CSRF)
注冊PersistentTokenRepository
- PersistentTokenRepository實現(xiàn)類
- InMemoryTokenRepositoryImpl基于內(nèi)存實現(xiàn)
- JdbcTokenRepositoryImpl基于數(shù)據(jù)庫實現(xiàn)
基于內(nèi)存實現(xiàn)
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Bean
public PersistentTokenRepository persistentTokenRepository() {
PersistentTokenRepository tokenRepository = new InMemoryTokenRepositoryImpl();
return tokenRepository;
}
}修改安全配置類
http.rememberMe().tokenRepository(persistentTokenRepository())
.tokenValiditySeconds(120)//設(shè)置有效時長,單位秒
.userDetailsService(userDetailsService)頁面添加記住我復(fù)選框
記住我:
<input type="checkbox"name="remember-me"title="記住密碼"/><br/>
此處:name 屬性值必須位remember-me.不能改為其他值
CSRF 理解(默認(rèn)開啟)
跨站請求偽造(英語:Cross-site request forgery),也被稱為 one-click attack 或者 session riding,通常縮寫為 CSRF 或者 XSRF, 是一種挾制用戶在當(dāng)前已登錄的Web應(yīng)用程序上執(zhí)行非本意的操作的攻擊方法。
跟跨網(wǎng)站腳本(XSS)相比,XSS利用的是用戶對指定網(wǎng)站的信任,CSRF 利用的是網(wǎng)站對用戶網(wǎng)頁瀏覽器的信任。
跨站請求攻擊,簡單地說,是攻擊者通過一些技術(shù)手段欺騙用戶的瀏覽器去訪問一個自己曾經(jīng)認(rèn)證過的網(wǎng)站并運行一些操作(如發(fā)郵件,發(fā)消息,甚至財產(chǎn)操作如轉(zhuǎn)賬和購買商品)。
由于瀏覽器曾經(jīng)認(rèn)證過,所以被訪問的網(wǎng)站會認(rèn)為是真正的用戶操作而去運行。
這利用了web中用戶身份驗證的一個漏洞:簡單的身份驗證只能保證請求發(fā)自某個用戶的瀏覽器,卻不能保證請求本身是用戶自愿發(fā)出的。
從Spring Security 4.0開始,默認(rèn)情況下會啟用CSRF保護,以防止CSRF攻擊應(yīng)用程序,Spring Security CSRF會針對PATCH,POST,PUT和DELETE方法進行防護。

解決方案
檢查Referer字段
Referer字段通常由瀏覽器在HTTP請求中發(fā)送,告訴服務(wù)器用戶是從哪個頁面鏈接過來的。然而,由于Referer字段可以被用戶修改或禁用,因此不能完全信任它來確保請求是從指定頁面發(fā)起的。
以下是檢查Referer字段的一些常見缺點:
- 用戶可以修改Referer字段:一些用戶可能會修改HTTP請求頭中的Referer字段,以試圖繞過安全檢查。
- Referer字段可能被緩存:某些代理服務(wù)器或緩存服務(wù)器可能會緩存Referer字段
CSRFToken

由于CSRF 是開啟的所以我們在登陸是未檢出token,則被認(rèn)定為csrf攻擊,報異常
security實現(xiàn)
在登錄頁面添加一個隱藏域:
<input type="hidden"th:if="${_csrf}!=null" th:value="${_csrf.token}" name="_csrf"/>關(guān)閉安全配置的類中的csrf
// http.csrf().disable();
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Mybatis-Plus開發(fā)提速器generator的使用
本文就介紹這款基于Mybatis-Plus的代碼自助生成器,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07
SpringBoot下實現(xiàn)session保持方式
這篇文章主要介紹了SpringBoot下實現(xiàn)session保持方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-03-03
Java Persistence對象關(guān)系映射的基礎(chǔ)與應(yīng)用
這篇文章主要介紹了Java Persistence對象關(guān)系映射的基礎(chǔ)與應(yīng)用,Persistence API是Java平臺提供的對象關(guān)系映射標(biāo)準(zhǔn),旨在簡化關(guān)系型數(shù)據(jù)庫的持久化操作,它在Java EE和Java SE環(huán)境中均可使用,為開發(fā)者提供了統(tǒng)一的數(shù)據(jù)訪問方式,需要的朋友可以參考下2025-05-05
Springmvc如何實現(xiàn)向前臺傳遞數(shù)據(jù)
這篇文章主要介紹了Springmvc如何實現(xiàn)向前臺傳遞數(shù)據(jù),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-07-07

