spring security单点登录跳过密码验证

这篇具有很好参考价值的文章主要介绍了spring security单点登录跳过密码验证。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

第一种方案:通过框架密码验证

考虑去掉BCryptPasswordEncoder的配置,直接明文校验,

配置CustomPasswordEncoder

@Component
public class CustomPasswordEncoder implements PasswordEncoder {
    @Override
    public String encode(CharSequence charSequence) {
        return charSequence.toString();
    }

    @Override
    public boolean matches(CharSequence charSequence, String s) {
        return s.equals(charSequence.toString());
    }
}
WebSecurityConfigurerAdapter继承类中,替换掉原先的BCryptPasswordEncoder 加密方式:
    /**
     * 强散列哈希加密实现
     */
    @Bean
    public BCryptPasswordEncoder bCryptPasswordEncoder()
    {
        return new BCryptPasswordEncoder();
    }   

 /**
     * 身份认证接口
     */
    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception
    {
       
   //auth.userDetailsService(userDetailsService).passwordEncoder(bCryptPasswordEncoder());                  
       auth.userDetailsService(userDetailsService).passwordEncoder(customPasswordEncoder);
    }

在单点登录验证方法中,先使用用户名查询到数据库中存储的全部用户信息,使查询出来的密码和框架自动调用查询方法得到的数据库密码通过CustomPasswordEncoder matches校验:

 SysUser user = userService.selectUserByUserName(username);
 String pwd = user.getPassword();

 Authentication authentication = authenticationManager
                    .authenticate(new UsernamePasswordAuthenticationToken(username, pwd));

实际登录时,手动调用加密方法,加密之后再比对

    /**
     * 生成BCryptPasswordEncoder密码
     *
     * @param password 密码
     * @return 加密字符串
     */
    public static String encryptPassword(String password)
    {
        BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
        return passwordEncoder.encode(password);
    }

但是忽略了每次使用BCryptPasswordEncoder校验都是生成不同的代码。

用户实际登录时,生成的加密密码和数据库存储的密码匹配不上。

发现spring security 在5.x版本开始为了支持动态的多种密码加密方式:DelegatingPasswordEncoder委托加密方式

这一块需要继续研究下,暂时搁置。

参考连接:

一篇文章带你入门 SpringSecurity实现密码加密和解码_南淮北安的博客-CSDN博客_springsecurity密码加密和解密

【SpringSecurity】BCrypt密码加密和解密 一文学会使用BCryptPasswordEncoder_普通网友的博客-CSDN博客_bcrypt加密解密

There is no PasswordEncoder mapped for the id "null" 的解决办法_Hello_World_QWP的博客-CSDN博客

Spring Security 设置2种加密方式(强散列哈希加密、自定义加密)_旭东怪的博客-CSDN博客_强散列哈希加密

Spring Security灵活的PasswordEncoder加密方式_恒宇少年的博客-CSDN博客


第二种方案:跳过框架密码验证

使用PreAuthenticatedAuthenticationToken,

  SysUser user = userService.selectUserByUserName(username);
  String pwd = user.getPassword();
  if(user.getUserId() != null){
      //存在这个用户
      Authentication authentication2 = authenticationManager.authenticate(new PreAuthenticatedAuthenticationToken(username,pwd));
  }

配置PreAuthenticatedAuthenticationProvider,处理预验证的验证请求,此身份验证提供程序不会对身份验证请求执行任何检查,因为它们应该已经通过预身份验证。

添加配置:

   @Bean
    public PreAuthenticatedAuthenticationProvider preAuthenticatedAuthenticationProvider(){

        //  log.info("Configuring pre authentication provider");

        UserDetailsByNameServiceWrapper<PreAuthenticatedAuthenticationToken> wrapper =
                new UserDetailsByNameServiceWrapper<>(
                        userDetailsService);

        PreAuthenticatedAuthenticationProvider it = new PreAuthenticatedAuthenticationProvider();
        it.setPreAuthenticatedUserDetailsService(wrapper);

        return it;
    }

    /**
     * 身份认证接口
     */
    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception
    {
        auth.userDetailsService(userDetailsService).passwordEncoder(bCryptPasswordEncoder());
        auth.authenticationProvider(preAuthenticatedAuthenticationProvider());
//        auth.userDetailsService(userDetailsService).passwordEncoder(customPasswordEncoder);
    }

参考连接:

Spring Security:身份验证提供程序AuthenticationProvider介绍_ITKaven的博客-CSDN博客_authenticationprovider

(49条消息) refresh_token 失败 提示No AuthenticationProvider found_aqwmb的博客-CSDN博客文章来源地址https://www.toymoban.com/news/detail-432658.html

到了这里,关于spring security单点登录跳过密码验证的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring Security自定义登陆界面和密码验证逻辑

    目录 1添加maven依赖 2创建配置文件处理跳转拦截等功能以及密码比对功能 3创建userservice 4自定义登陆界面login.html 上面的UserDateService 中我们固定返回一个用户名密码为admin        123的user类 然后security的configure(AuthenticationManagerBuilder auth)进行密码对比,注意这里只是比较密码

    2024年02月13日
    浏览(41)
  • 在 Spring Security 中定义多种登录方式,比如邮箱、手机验证码登录

    现在各大网站登录的方式是越来越多。比如:传统的用户名密码登录、快捷的邮箱、手机验证码登录,还有流行的第三方登录。那本篇呢,就给大家带来如何在 Spring Security 中定义使用邮箱验证码登录方式。看完本篇,让你学会自定义认证方式,如果公司还需要使用手机验证

    2024年02月11日
    浏览(41)
  • Spring-Security+OAuth2+redis实现密码登录

    一、OAuth2认证模式         一共四种认证方式,授权码模式、密码模式、简化模式和客户端模式。实现单点登录,比较流行的方法是使用jwt方式,jwt是无状态的,其本身就能携带信息,因此服务端可以不用保存他的信息,但只要token不过期,用户就可以一直访问,这样就无

    2024年02月16日
    浏览(33)
  • Spring Security 6.0系列【14】认证篇之添加登录验证码功能

    有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot 版本 3.0.4 本系列Spring Security 版本 6.0.2 源码地址:https://gitee.com/pearl-organization/study-spring-security-demo 验证码 ( CAPTCHA )是“ Completely Automated Public Turing test to tell Computers and Humans Apart ”(全自动区分计算机和人类的图灵

    2023年04月09日
    浏览(51)
  • Spring Security 6.0系列【15】认证篇之实现短信验证码登录功能

    有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot 版本 3.0.4 本系列Spring Security 版本 6.0.2 源码地址:https://gitee.com/pearl-organization/study-spring-security-demo 目前大部分网站都支持使用 手机号+短信验证码 登录,比

    2023年04月24日
    浏览(65)
  • Spring Security 6.x 系列【15】认证篇之实现短信验证码登录功能

    有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot 版本 3.0.4 本系列Spring Security 版本 6.0.2 源码地址:https://gitee.com/pearl-organization/study-spring-security-demo 目前大部分网站都支持使用 手机号+短信验证码 登录,比

    2024年02月05日
    浏览(56)
  • spring boot中常用的安全框架 Security框架 利用Security框架实现用户登录验证token和用户授权(接口权限控制)

    spring boot中常用的安全框架 Security 和 Shiro 框架 Security 两大核心功能 认证 和 授权 重量级 Shiro 轻量级框架 不限于web 开发 在不使用安全框架的时候 一般我们利用过滤器和 aop自己实现 权限验证 用户登录 Security 实现逻辑 输入用户名和密码 提交 把提交用户名和密码封装对象

    2024年02月06日
    浏览(52)
  • Spring boot框架 JWT实现用户账户密码登录验证

    目录 1、JWT定义 1、1 JWT工作流程 1、2 JWT优点 2、添加依赖项到pom.xml  3、创建用户实体类  4、实现认证服务 5、登录请求处理 6、生成JWT JWT(JSON Web Token)是一种用于在网络应用间传递信息的安全传输方式。它是一种紧凑且自包含的方式,通过使用数字签名来验证数据的完整性

    2024年02月07日
    浏览(59)
  • Windows10 开机跳过密码验证

    Windows10 2004以后版本因为Pin、outlook登录的一些原因将control userpasswords2(netplwiz)设置中的“要使用本地计算机,用户必须输入用户名和密码”选项隐藏了。 开启方法: 1.进入注册表 开始 - 运行 - regedit 2.展开注册表项 HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionPasswordLe

    2024年02月12日
    浏览(36)
  • SAP安全 - 用户身份验证和单点登录

    单点登录(SSO) 是允许您登录到一个系统的关键概念之一,您可以在后端访问多个系统. SSO允许用户通过后端的SAP系统访问软件资源. 使用NetWeaver的SSO  平台提供用户身份验证并帮助系统管理员管理用户在复杂的SAP系统架构中加载. SSO配置通过增强安全措施并减少多个系统的密码

    2024年02月04日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包