springsecurity 登录认证一(ajax)

[复制链接]
发表于 3 天前 | 显示全部楼层 |阅读模式
一、准备工作

        1.1 导入依靠

     因springboot 3.0 + 以上版本只能支持java17 顾利用2.5.0 版本
  

  

  1.   <parent>
  2.         <groupId>org.springframework.boot</groupId>
  3.         <artifactId>spring-boot-starter-parent</artifactId>
  4.         <version>2.5.0</version>
  5.        <!-- <version>2.7.18</version>-->
  6.     </parent>
  7. <dependencies>
  8.         <dependency>
  9.             <groupId>org.springframework.boot</groupId>
  10.             <artifactId>spring-boot-starter-web</artifactId>
  11.         </dependency>
  12.         <dependency>
  13.             <groupId>org.springframework.boot</groupId>
  14.             <artifactId>spring-boot-starter-security</artifactId>
  15.         </dependency>
  16.         <dependency>
  17.             <groupId>org.projectlombok</groupId>
  18.             <artifactId>lombok</artifactId>
  19.         </dependency>
  20.         <dependency>
  21.             <groupId>org.springframework.boot</groupId>
  22.             <artifactId>spring-boot-starter-test</artifactId>
  23.         </dependency>
  24.         <!-- thymeleaf 相关依赖 -->
  25.         <dependency>
  26.             <groupId>org.springframework.boot</groupId>
  27.             <artifactId>spring-boot-starter-thymeleaf</artifactId>
  28.         </dependency>
  29.         <dependency>
  30.             <groupId>org.springframework.boot</groupId>
  31.             <artifactId>spring-boot-devtools</artifactId>
  32.             <scope>runtime</scope>
  33.             <optional>true</optional>
  34.         </dependency>
  35.         <dependency>
  36.             <groupId>org.springframework.boot</groupId>
  37.             <artifactId>spring-boot-starter-logging</artifactId>
  38.         </dependency>
  39.         <dependency>
  40.             <groupId>cn.hutool</groupId>
  41.             <artifactId>hutool-all</artifactId>
  42.             <version>5.8.11</version>
  43.         </dependency>
  44.         <!-- mybatis坐标 -->
  45.         <dependency>
  46.             <groupId>org.mybatis.spring.boot</groupId>
  47.             <artifactId>mybatis-spring-boot-starter</artifactId>
  48.             <version>2.2.2</version>
  49.         </dependency>
  50.         <!-- mysql -->
  51.         <dependency>
  52.             <groupId>mysql</groupId>
  53.             <artifactId>mysql-connector-java</artifactId>
  54.            <!-- <version>8.0.28</version>-->
  55.         </dependency>
  56.         <!--validation依赖-->
  57.         <dependency>
  58.             <groupId>org.springframework.boot</groupId>
  59.             <artifactId>spring-boot-starter-validation</artifactId>
  60.         </dependency>
  61.         <!--redis坐标-->
  62.         <dependency>
  63.             <groupId>org.springframework.boot</groupId>
  64.             <artifactId>spring-boot-starter-data-redis</artifactId>
  65.         </dependency>
  66.         <!--springdoc-openapi-->
  67.         <dependency>
  68.             <groupId>org.springdoc</groupId>
  69.             <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
  70.             <version>2.1.0</version>
  71.         </dependency>
  72.         <dependency>
  73.             <groupId>org.springdoc</groupId>
  74.             <artifactId>springdoc-openapi-starter-webmvc-api</artifactId>
  75.             <version>2.1.0</version>
  76.         </dependency>
  77.         <!--fastjson依赖-->
  78.         <dependency>
  79.             <groupId>com.alibaba</groupId>
  80.             <artifactId>fastjson</artifactId>
  81.             <version>1.2.33</version>
  82.         </dependency>
  83.         <!--jwt依赖-->
  84.         <dependency>
  85.             <groupId>io.jsonwebtoken</groupId>
  86.             <artifactId>jjwt</artifactId>
  87.             <version>0.9.0</version>
  88.         </dependency>
  89.     </dependencies>
  90. <build>
  91.         <plugins>
  92.             <plugin>
  93.                 <groupId>org.springframework.boot</groupId>
  94.                 <artifactId>spring-boot-maven-plugin</artifactId>
  95.             </plugin>
  96.         </plugins>
  97.     </build>
复制代码
二、认证

        2.1 登录认证流程

   

  接口表明
          Authentication接口: 它的实现类,表现当前访问体系的用户,封装了用户干系信息;
          AuthenticationManager接口:界说了认证Authentication的方法;
          UserDetailsService接口:加载用户特定命据的焦点接口。内里界说了一个根据用户名查询用户信息的 方法;
        UserDetails接口:提供焦点用户信息。通过UserDetailsService根据用户名获取处理处罚的用户信息要封装 成UserDetails对象返回。然后将这些信息封装到Authentication对象中;  
  2.3  自界说数据源分析

   

  ①自界说登录接口 调用ProviderManager的方法举行认证 假如认证通过天生jwt 把用户信息存入redis中;
  ②自界说UserDetailsService 在这个实现类中去查询数据库
  2.4  自界说数据源查询代码实现(可实现多数据源模式,db2,mysql)

2.4.1 自界说数据源扫描mapper

  1. package com.fashion.config.datasource;
  2. import com.zaxxer.hikari.HikariDataSource;
  3. import org.apache.ibatis.session.SqlSessionFactory;
  4. import org.mybatis.spring.SqlSessionFactoryBean;
  5. import org.mybatis.spring.annotation.MapperScan;
  6. import org.springframework.beans.factory.annotation.Autowired;
  7. import org.springframework.context.annotation.Bean;
  8. import org.springframework.context.annotation.Configuration;
  9. import org.springframework.context.annotation.Primary;
  10. import org.springframework.core.io.ClassPathResource;
  11. import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
  12. import javax.sql.DataSource;
  13. /**
  14. * @Author: LQ
  15. * @Date 2024/8/17 14:23
  16. * @Description: mysql 配置
  17. */
  18. @Configuration
  19. @MapperScan(basePackages = "com.fashion.mapper.mysql",sqlSessionFactoryRef = "mysqlSqlSessionFactory")
  20. public class MysqlDataSourceConfig {
  21.     @Primary
  22.     @Bean
  23.     public DataSource mysqlDataSource() {
  24.         HikariDataSource dataSource = new HikariDataSource();
  25.         dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/lq");
  26.         dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
  27.         dataSource.setUsername("root");
  28.         dataSource.setPassword("123456");
  29.         return dataSource;
  30.     }
  31.     @Primary
  32.     @Bean
  33.     public SqlSessionFactory mysqlSqlSessionFactory(@Autowired DataSource mysqlDataSource){
  34.         SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
  35.         sessionFactory.setDataSource(mysqlDataSource);
  36.         sessionFactory.setConfigLocation(new ClassPathResource("/mybatis/mybatis-config.xml"));
  37.         try {
  38.             // mapper xml 文件位置
  39.             sessionFactory.setMapperLocations(
  40.                     new PathMatchingResourcePatternResolver()
  41.                             .getResources("classpath:mybatis/mapper/mysql/*.xml"));
  42.           //  sessionFactory.setMapperLocations(new ClassPathResource("/mybatis/mapper/mysql/*.xml"));
  43.             return sessionFactory.getObject();
  44.         } catch (Exception e) {
  45.             e.printStackTrace();
  46.         }
  47.         return null;
  48.     }
  49. }
复制代码
2.4.2 自界说 UserDetailsService

  1. package com.fashion.service;
  2. import com.fashion.domain.LoginSessionUserInf;
  3. import com.fashion.domain.mysql.TUserInf;
  4. import com.fashion.exception.CustomerAuthenticationException;
  5. import com.fashion.mapper.mysql.TUserInfMapper;
  6. import org.springframework.beans.factory.annotation.Autowired;
  7. import org.springframework.security.core.userdetails.UserDetails;
  8. import org.springframework.security.core.userdetails.UserDetailsService;
  9. import org.springframework.security.core.userdetails.UsernameNotFoundException;
  10. import org.springframework.stereotype.Component;
  11. import org.springframework.util.ObjectUtils;
  12. import java.util.Arrays;
  13. import java.util.List;
  14. /**
  15. * @Author: LQ
  16. * @Date 2024/8/13 21:12
  17. * @Description:
  18. */
  19. @Component
  20. public class UserDetailsServiceImpl implements UserDetailsService {
  21.     @Autowired
  22.     private TUserInfMapper userInfMapper;
  23.     @Override
  24.     public UserDetails loadUserByUsername(String loginId) throws UsernameNotFoundException {
  25.         // 根据用户名获取用户信息
  26.         if (ObjectUtils.isEmpty(loginId)) {
  27.             throw new CustomerAuthenticationException("用户名不能为空!");
  28.         }
  29.         TUserInf tUserInf = userInfMapper.selectByLoginId(loginId);
  30.         if (ObjectUtils.isEmpty(tUserInf)) {
  31.             throw new CustomerAuthenticationException("用户不存在!");
  32.         }
  33.         // 获取权限信息 todo:后期从数据库查询
  34.         List<String> perList = Arrays.asList("new:query", "news:delete");
  35.         LoginSessionUserInf loginSessionUserInf = new LoginSessionUserInf(tUserInf, perList);
  36.         return loginSessionUserInf;
  37.     }
  38. }
复制代码
2.4.3 自界说 UserDetails

  1. package com.fashion.domain;
  2. import com.alibaba.fastjson.annotation.JSONField;
  3. import com.fashion.domain.mysql.TUserInf;
  4. import com.fasterxml.jackson.annotation.JsonIgnore;
  5. import lombok.Data;
  6. import org.springframework.security.core.GrantedAuthority;
  7. import or
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!qidao123.com:ToB企服之家,中国第一个企服评测及软件市场,开放入驻,技术点评得现金

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表