Spring Security使用数据库认证及用户密码加密和解密功能

流程图:

1.接上一篇博客https://mp.csdn.net/console/editor/html/104576494,准备好环境。

2.spring-security.xml中的配置:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:security="http://www.springframework.org/schema/security"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.springframework.org/schema/beans
  http://www.springframework.org/schema/beans/spring-beans.xsd
  http://www.springframework.org/schema/security
  http://www.springframework.org/schema/security/spring-security.xsd">

  <!-- 配置不拦截的资源 -->
  <security:http pattern="/login.jsp" security="none"/>
  <security:http pattern="/failer.jsp" security="none"/>
  <security:http pattern="/css/**" security="none"/>
  <security:http pattern="/img/**" security="none"/>
  <security:http pattern="/plugins/**" security="none"/>

  <!--
    配置具体的规则
    auto-config="true"  不用自己编写登录的页面,框架提供默认登录页面
    use-expressions="false"  是否使用SPEL表达式(没学习过)
  -->
  <security:http auto-config="true" use-expressions="false">
    <!-- 配置具体的拦截的规则 pattern="请求路径的规则" access="访问系统的人,必须有ROLE_USER或者ROLE_ADMIN的角色" -->
    <security:intercept-url pattern="/**" access="ROLE_USER,ROLE_ADMIN"/>

    <!-- 定义跳转的具体的页面 -->
    <security:form-login
      login-page="/login.jsp"
      login-processing-url="/login.do"//请求路径
      default-target-url="/index.jsp"
      authentication-failure-url="/failer.jsp"
      authentication-success-forward-url="/pages/main.jsp"
    />

    <!-- 关闭跨域请求 -->
    <security:csrf disabled="true"/>

    <!-- 只要访问到/logout.do就退出,自动跳转到/login.jsp页面 -->
    <security:logout invalidate-session="true" logout-url="/logout.do" logout-success-url="/login.jsp" />

  </security:http>

  <!-- 切换成数据库中的用户名和密码 -->
  <security:authentication-manager>
    <security:authentication-provider user-service-ref="userService">//userService是认证器需要定义出来
       <!-- 配置加密的方式,用户登录的时候可以知道 -->
      <security:password-encoder ref="passwordEncoder"/>
    </security:authentication-provider>
  </security:authentication-manager>

  <!-- 配置加密类,当添加用户的时候,对用户密码进行加密 -->
  <bean id="passwordEncoder" class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder"/>

  <!-- 提供了入门的方式,在内存中存入用户名和密码
  <security:authentication-manager>
    <security:authentication-provider>
      <security:user-service>
        <security:user name="admin" password="{noop}admin" authorities="ROLE_USER"/>
      </security:user-service>
    </security:authentication-provider>
  </security:authentication-manager>
  -->

 </beans>

3.定义一个IUserService继承UserDetailsService接口:

在创建一个UserServiceImpl去实现IUserService接口,覆盖loadUserByUsername方法:

@Service("userService")//这个名字必须与spring-security.xml中配置的认证器名字一样

public class UserServiceImpl implements IUserService {
  @Autowired
  private IUserDao userDao;
  @Autowired//当执行保存用户的时候对用户的密码进行加密
  private BCryptPasswordEncoder bCryptPasswordEncoder;
  @Override
  public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
    UserInfo userInfo = null;
    try {
      userInfo = userDao.findByUsername(username);//调用到层根据用户查找用户信息,返回值为UserInfo对象
    } catch (Exception e) {
      e.printStackTrace();
    }
    //处理自己的用户对象封装成UserDetails
    // User user=new User(userInfo.getUsername(),"{noop}"+userInfo.getPassword(),getAuthority(userInfo.getRoles()));//下面这个三元表达式代表该账户是否激活可用
    User user = new User(userInfo.getUsername(), userInfo.getPassword(), userInfo.getStatus() == 0 ? false : true, true, true, true, getAuthority(userInfo.getRoles()));
    return user;
  }
  //作用就是返回一个List集合,集合中装入的是角色描述
  public List<SimpleGrantedAuthority> getAuthority(List<Role> roles) {
    List<SimpleGrantedAuthority> list = new ArrayList<>();
    for (Role role : roles) {
      list.add(new SimpleGrantedAuthority("ROLE_" + role.getRoleName()));
    }
    return list;
  }
  /**
   * 用户的添加
   * @param userInfo
   */
  @Override
  public void save(UserInfo userInfo) throws Exception {
    //对密码进行加密处理
    userInfo.setPassword(bCryptPasswordEncoder.encode(userInfo.getPassword()));
    userDao.save(userInfo);
  }
}

4.启动项目进行测试添加用户,新添加的用户是否可以登录成功。

总结

到此这篇关于Spring Security使用数据库认证及用户密码加密和解密功能的文章就介绍到这了,更多相关Spring Security数据库认证内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • spring security 5.x实现兼容多种密码的加密方式

    前言 本文主要给大家介绍了关于spring security 5.x实现兼容多种密码的加密方式,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 1.spring security PasswordEncoder spring security 5不需要配置密码的加密方式,而是用户密码加前缀的方式表明加密方式,如: {MD5}88e2d8cd1e92fd5544c8621508cd706b代表使用的是MD5加密方式: {bcrypt}$2a$10$eZeGvVV2ZXr/vgiV

  • spring security数据库表结构实例代码

    PD建模图 建模语句 alter table SYS_AUTHORITIES_RESOURCES drop constraint FK_SYS_AUTH_REFERENCE_SYS_AUTH; alter table SYS_AUTHORITIES_RESOURCES drop constraint FK_SYS_AUTH_REFERENCE_SYS_RESO; alter table SYS_RESOURCES drop constraint FK_SYS_RESO_REFERENCE_SYS

  • Spring Security使用数据库认证及用户密码加密和解密功能

    流程图: 1.接上一篇博客https://mp.csdn.net/console/editor/html/104576494,准备好环境. 2.spring-security.xml中的配置: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:security="

  • Springboot集成Spring Security实现JWT认证的步骤详解

    1 简介 Spring Security作为成熟且强大的安全框架,得到许多大厂的青睐.而作为前后端分离的SSO方案,JWT也在许多项目中应用.本文将介绍如何通过Spring Security实现JWT认证. 用户与服务器交互大概如下: 客户端获取JWT,一般通过POST方法把用户名/密码传给server: 服务端接收到客户端的请求后,会检验用户名/密码是否正确,如果正确则生成JWT并返回:不正确则返回错误: 客户端拿到JWT后,在有效期内都可以通过JWT来访问资源了,一般把JWT放在请求头:一次

  • Spring Security使用数据库登录认证授权

    目录 一.搭建项目环境 1.创建 RBAC五张表 2.创建项目 二.整合 Spring Security实现用户认证 1.后端整合 2.前端整合 三.整合 Spring Security实现用户授权 1.后端 2.前端 一.搭建项目环境 1.创建 RBAC五张表 RBAC,即基于角色的权限访问控制(Role-Based Access Control),就是用户通过角色与权限进行关联.在这种模型中,用户与角色之间,角色与权限之间,一般者是多对多的关系. 在 MySQL数据库中,创建如下几个表: D

  • Spring Security+JWT实现认证与授权的实现

    目录 一.登录校验流程 1.Spring Security 完整流程 2.Spring Security的默认登陆验证流程. 3. 整合JWT大致流程 前端响应类 JWT工具类 重写UserDetailsService的方法 重写登录接口 认证过滤器 退出登陆 授权基本流程 限制访问资源所需权限 封装权限信息 RBAC权限模型 自定义失败处理 认证:验证当前访问系统的是不是本系统的用户,并且要确认具体是哪个用户 授权:经过认证后判断当前用户是否有权限进行某个操作 一.登录校验流程 1.Sprin

  • Springboot WebFlux集成Spring Security实现JWT认证的示例

    1 简介 在之前的文章<Springboot集成Spring Security实现JWT认证>讲解了如何在传统的Web项目中整合Spring Security和JWT,今天我们讲解如何在响应式WebFlux项目中整合.二者大体是相同的,主要区别在于Reactive WebFlux与传统Web的区别. 2 项目整合 引入必要的依赖: <dependency> <groupId>org.springframework.boot</groupId> <art

  • Spring Security实现HTTP认证

    目录 前言 一.HTTP基本认证是什么? 二.HTTP基本认证流程 一.Spring Security使用HTTP基本认证 1.创建项目spring-security-http-auth 2.创建配置文件WebSecurityConfig 3.运行项目 二.Spring Security HTTP基本认证原理 三.HTTP摘要认证是什么? 四.Spring Security使用HTTP摘要认证流程? 运行项目 Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安

  • MongoDB4.28开启权限认证配置用户密码登录功能

    目录 1.查看是否开启认证登录 2.开启用户名和密码认证(创建用户均需进入admin数据库) 2.1.为admin数据库创建管理员账号 2.2.为数据库mytest创建普通用户 2.3.配置文件开启用户名密码认证 3.重启mongo服务 4.mongo授权访问 4.1.admin数据库授权登录 4.1.mytest数据库授权登录 MongoDB默认不启用授权认证,只要能连接到该服务器,就可连接到mongod.若要启用安全认证,需要更改配置文件mongdb.conf中的参数auth. MongoD

  • 详解Spring Security中获取当前登录用户的详细信息的几种方法

    目录 在Bean中获取用户信息 在Controller中获取用户信息 通过 Interface 获取用户信息 在JSP页面中获取用户信息 在Bean中获取用户信息 Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); if (!(authentication instanceof AnonymousAuthenticationToken)) { String currentU

  • 使用mongoose和bcrypt实现用户密码加密的示例

    前面的话 最近在做的个人项目中,需要对密码进行加密保存,对该操作的详细步骤记录如下 介绍 关于mongoose已经写过博客就不再赘述,下面主要介绍bcrypt bcrypt是一个由两个外国人根据Blowfish加密算法所设计的密码散列函数.实现中bcrypt会使用一个加盐的流程以防御彩虹表攻击,同时bcrypt还是适应性函数,它可以借由增加迭代之次数来抵御暴力破解法 使用npm安装即可 npm install --save bcrypt 用户模型 下面来创建代码用户user的schema,用户名

随机推荐