关于spring-security(记住密码,CSRF)

 更新时间:2024年11月16日 08:56:54   作者:何老生  
文章主要介绍了Spring Security中的PersistentTokenRepository、CSRF保护机制以及如何在登录页面添加记住我功能,并分享了相关实现代码和配置

注册PersistentTokenRepository

  • PersistentTokenRepository实现类
  • InMemoryTokenRepositoryImpl基于内存实现
  • JdbcTokenRepositoryImpl基于数据库实现

基于内存实现

@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Bean
public PersistentTokenRepository persistentTokenRepository() {
PersistentTokenRepository tokenRepository = new InMemoryTokenRepositoryImpl();
return tokenRepository;
}
}

修改安全配置类

http.rememberMe().tokenRepository(persistentTokenRepository())
                .tokenValiditySeconds(120)//设置有效时长,单位秒
                .userDetailsService(userDetailsService)

页面添加记住我复选框

记住我:

<input type="checkbox"name="remember-me"title="记住密码"/><br/>

此处:name 属性值必须位remember-me.不能改为其他值

CSRF 理解(默认开启)

跨站请求伪造(英语:Cross-site request forgery),也被称为 one-click attack 或者 session riding,通常缩写为 CSRF 或者 XSRF, 是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。

跟跨网站脚本(XSS)相比,XSS利用的是用户对指定网站的信任,CSRF 利用的是网站对用户网页浏览器的信任。

跨站请求攻击,简单地说,是攻击者通过一些技术手段欺骗用户的浏览器去访问一个自己曾经认证过的网站并运行一些操作(如发邮件,发消息,甚至财产操作如转账和购买商品)。

由于浏览器曾经认证过,所以被访问的网站会认为是真正的用户操作而去运行。

这利用了web中用户身份验证的一个漏洞:简单的身份验证只能保证请求发自某个用户的浏览器,却不能保证请求本身是用户自愿发出的。

从Spring Security 4.0开始,默认情况下会启用CSRF保护,以防止CSRF攻击应用程序,Spring Security CSRF会针对PATCH,POST,PUT和DELETE方法进行防护。

解决方案

检查Referer字段

Referer字段通常由浏览器在HTTP请求中发送,告诉服务器用户是从哪个页面链接过来的。然而,由于Referer字段可以被用户修改或禁用,因此不能完全信任它来确保请求是从指定页面发起的。

以下是检查Referer字段的一些常见缺点:

  • 用户可以修改Referer字段:一些用户可能会修改HTTP请求头中的Referer字段,以试图绕过安全检查。
  • Referer字段可能被缓存:某些代理服务器或缓存服务器可能会缓存Referer字段

CSRFToken

由于CSRF 是开启的所以我们在登陆是未检出token,则被认定为csrf攻击,报异常

security实现

在登录页面添加一个隐藏域:

<input type="hidden"th:if="${_csrf}!=null" th:value="${_csrf.token}" name="_csrf"/>

关闭安全配置的类中的csrf

// http.csrf().disable();

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 编译期动态替换三方包中的Class文件过程详解

    编译期动态替换三方包中的Class文件过程详解

    这篇文章主要为大家介绍了编译期动态替换三方包中的Class文件过程详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • java算法之二分查找法的实例详解

    java算法之二分查找法的实例详解

    这篇文章主要介绍了java算法之二分查找法的实例详解的相关资料,这里提供简单实例帮助大家学习理解这部分内容,需要的朋友可以参考下
    2017-08-08
  • Mybatis-Plus开发提速器generator的使用

    Mybatis-Plus开发提速器generator的使用

    本文就介绍这款基于Mybatis-Plus的代码自助生成器,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • SpringBoot下实现session保持方式

    SpringBoot下实现session保持方式

    这篇文章主要介绍了SpringBoot下实现session保持方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • Java Persistence对象关系映射的基础与应用

    Java Persistence对象关系映射的基础与应用

    这篇文章主要介绍了Java Persistence对象关系映射的基础与应用,Persistence API是Java平台提供的对象关系映射标准,旨在简化关系型数据库的持久化操作,它在Java EE和Java SE环境中均可使用,为开发者提供了统一的数据访问方式,需要的朋友可以参考下
    2025-05-05
  • 解决Spring boot 嵌入的tomcat不启动问题

    解决Spring boot 嵌入的tomcat不启动问题

    这篇文章主要介绍了解决Spring boot 嵌入的tomcat不启动问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-10-10
  • Java文件基本操作总结

    Java文件基本操作总结

    今天给大家带来的是关于Java基础的相关知识,文章围绕着Java文件操作展开,文中有非常详细的介绍及代码示例,需要的朋友可以参考下
    2021-06-06
  • Java实现把文件压缩成zip文件的示例代码

    Java实现把文件压缩成zip文件的示例代码

    这篇文章主要为大家介绍了如何通过Java语言实现将文件压缩成zip文件,本文中示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-02-02
  • java计算两个日期之间相差天数的4种方法详解

    java计算两个日期之间相差天数的4种方法详解

    这篇文章主要给大家介绍了关于java计算两个日期之间相差天数的4种方法,本文简短地介绍java中多种方式求两个日期的差量,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-09-09
  • Springmvc如何实现向前台传递数据

    Springmvc如何实现向前台传递数据

    这篇文章主要介绍了Springmvc如何实现向前台传递数据,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07

最新评论