首页 > 其他分享 >Spring Security认证相关(一)

Spring Security认证相关(一)

时间:2024-04-23 10:13:57浏览次数:19  
标签:登录 密码 Spring 认证 会话 new Security

会话管理

Spring Security认证成功之后会保存会话信息,将认证信息保存在Session,发送JSESSIONID数据给浏览器保存在Cookie中,浏览器访问的时候携带Cookie,服务器根据JSESSIONID找到Session

Spring Security中会话创建策略有下面几种:

设置超时:

// 会话
http.sessionManagement(session -> {
    session
        // 创建会话策略
        .sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED)
        // 会话超时访问url
        .invalidSessionUrl("/login")
        // 一个账号最大登录设备数量
        .maximumSessions(1)
        // 当一个账号有多个用户登录时提示
        .expiredSessionStrategy(new SessionInformationExpiredStrategyImpl());
});
public class SessionInformationExpiredStrategyImpl implements SessionInformationExpiredStrategy {
    @Override
    public void onExpiredSessionDetected(SessionInformationExpiredEvent event) throws IOException, ServletException {
        Map<String,Object> map = new HashMap<>();
        map.put("code", "-1");
        map.put("message", "登录失败");
        map.put("data", "当前账号已在其它设备登录");
        String json = new ObjectMapper().writeValueAsString(map);
        HttpServletResponse response = event.getResponse();
        response.setContentType("application/json;charset=utf-8");
        response.getWriter().println(json);
    }
}

密码编辑器

密码编辑器接口PasswordEncoder

默认Spring Security提供一些实现类:

在5.0之后的默认密码编辑器是DelegatingPasswordEncoder,可以根据前缀匹配不同的密码编辑器,比如下面这样:

格式:{算法名}加密后密码
{bcrypt}$2a$10$c2jp7iXCNwjEgtA9d2zQde01HpKIUpihEKo4Z.uasrvt.cTxWjFgy

在配置文件中我们可以指定某一种密码编辑器:

/**
  * 密码器
  * @return BCrypt密码器
*/
@Bean
public PasswordEncoder passwordEncoder(){
    return new BCryptPasswordEncoder();
}

Remember-me(记住我)

Remember-me(记住我)或persistent-login认证是指网站能够在两次会话之间记住委托人的身份。这通常是通过向浏览器发送一个cookie来实现的,在未来的会话中可以检测到cookie,并导致自动登录的发生。Spring Security为这些操作提供了必要的钩子,并有两个具体的“记住我”的实现。一个使用散列法来保护基于cookie的令牌的安全性,另一个使用数据库或其他持久性存储机制来存储生成的令牌。

请注意,这两种实现都需要一个 UserDetailsService。如果你使用一个不使用 UserDetailsService 的认证 provider(例如,LDAP provider),除非你在你的应用程序上下文中也有一个 UserDetailsService Bean,否则它不会工作。

Spring Security中开启记住我,只需要在配置文件中开启配置即可。

@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
    // 认证相关
    http.authorizeRequests(authorize ->
                           authorize
                           // /login.html请求不需要验证
                           .requestMatchers(new AntPathRequestMatcher("/login")
                                            ,new AntPathRequestMatcher("/logout")).permitAll()
                           .anyRequest()
                           .authenticated()
                          );
    http.formLogin(Customizer.withDefaults());
    http.rememberMe();
}

这里我们使用默认的登录表单,效果如下:

使用F12查看登录参数,会发现多了一个remember-me

在登录之后关闭浏览器再次访问:

标签:登录,密码,Spring,认证,会话,new,Security
From: https://www.cnblogs.com/wyzstudy/p/18152211

相关文章

  • Spring 源码阅读(二)IoC 容器初始化以及 BeanFactory 创建和 BeanDefinition 加载过程
    相关代码提交记录:https://github.com/linweiwang/spring-framework-5.3.33IoC容器三种启动方式XMLJavaSE:ApplicationContextcontext=newClassPathXmlApplicationContext("beans.xml")ApplicationContextcontext=newFileSystemXmlApplicationContext("C:/beans......
  • flutter 结合 springBoot 完成登录 注册 功能
    后端接口 前端调用接口代码import'package:dio/dio.dart';import'package:flutter/material.dart';import'../page/login.dart';//注册功能Future<void>register(BuildContextcontext,Stringusername,Stringpassword,......
  • sh002基于springboot的网上团购系统
    介绍网上团购系统管理员功能主要包括:个人中心、用户管理、商品列表管理、团购商品管理、订单管理、系统管理等功能由于本系统的功能模块设计比较全面,所以使得整个网上团购系统信息管理的过程得以实现。获取方式:联系QQ422149197软件架构推荐使用:谷歌浏览器后台地址http://lo......
  • sh003基于springboot的汽车租赁系统
    sh003基于springboot的汽车租赁系统 介绍汽车租赁系统管理员功能主要包括:系统设置管理、用户管理、留言板管理、公告类型管理、公告管理等功能由于本系统的功能模块设计比较全面,所以使得整个汽车租赁系统信息管理的过程得以实现。软件架构推荐使用:谷歌浏览器前台登录页......
  • sh001基于springboot+vue的线上医院挂号系统[带LW文档]
    介绍线上医院挂号系统管理员功能主要包括:个人信息管理、用户管理、论坛管理、医生管理、医生留言管理、单页数据管理、个人中心基础数据管理、医生挂号订单管理、轮播图设置等功能由于本系统的功能模块设计比较全面,所以使得整个线上医院挂号系统信息管理的过程得以实现。获取......
  • 缓存问题+Spring Cache
    在微信小程序端,展示菜品的相关信息时,如果同一时间有大量用户访问或点餐,其实会生成很多sql语句,数据库访问压力很大的,如果访问压力过大,造成数据库性能下降,用户的体验感下降,具体体现在,点击菜品信息后,一直转圈。 如果把这个商品缓存到redis中,这样可以大大提高查询性能 实现思路......
  • Spring中将@RequestParam绑定到对象(转)
    译文:https://blog.csdn.net/dnc8371/article/details/106810876/译文作者:dnc8371来源:CSDN原文:https://www.javacodegeeks.com/2018/10/how-bind-requestparam-object-spring.html您是否在请求映射方法中用@RequestParam注释了多个参数,并认为它不可读?当请求中需要一个或两个输......
  • linux下springboot项目nohup日志或tomcat日志切割处理方案
    https://juejin.cn/post/7081890486453010469通常情况下,我们的springboot项目部署到linux服务器中,通过nohupjava-jarxxx.jar&指令来进行后台运行我们的springboot项目。这种方式针对中小型项目来说,还是比较简单方便的。通过nohup运行springboot项目,默认日志输出到当前目......
  • Node.js身份核验接口、身份证二、三要素实名认证接口
    随着互联网的高速发展,人们可以发表言论的渠道越来越多。网络平台不断汲取各地、各人、各时发表的各种信息。人们喜欢将信息发布到微博、知乎、天涯、豆瓣等等网络平台,逐步的,网络信息进入大爆炸时代。这些大量涌现的信息中难免掺杂着一些不良信息,比如:虚假信息、污言秽语、违法......
  • SpringBoot模块集成mqtt代码实现
    1//引入pom2<!--mqtt-->3<dependency>4<groupId>org.springframework.boot</groupId>5<artifactId>spring-boot-starter-integration</artifactId>6</dependency>......