一、准备工作
1.1 导入依靠
因springboot 3.0 + 以上版本只能支持java17 顾利用2.5.0 版本
二、认证
2.1 登录认证流程
接口表明
Authentication接口: 它的实现类,表现当前访问体系的用户,封装了用户干系信息;
AuthenticationManager接口:界说了认证Authentication的方法;
UserDetailsService接口:加载用户特定命据的焦点接口。内里界说了一个根据用户名查询用户信息的 方法;
UserDetails接口:提供焦点用户信息。通过UserDetailsService根据用户名获取处理处罚的用户信息要封装 成UserDetails对象返回。然后将这些信息封装到Authentication对象中;
2.3 自界说数据源分析
①自界说登录接口 调用ProviderManager的方法举行认证 假如认证通过天生jwt 把用户信息存入redis中;
②自界说UserDetailsService 在这个实现类中去查询数据库;
2.4 自界说数据源查询代码实现(可实现多数据源模式,db2,mysql)
2.4.1 自界说数据源扫描mapper
- package com.fashion.config.datasource;
- import com.zaxxer.hikari.HikariDataSource;
- import org.apache.ibatis.session.SqlSessionFactory;
- import org.mybatis.spring.SqlSessionFactoryBean;
- import org.mybatis.spring.annotation.MapperScan;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.context.annotation.Bean;
- import org.springframework.context.annotation.Configuration;
- import org.springframework.context.annotation.Primary;
- import org.springframework.core.io.ClassPathResource;
- import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
- import javax.sql.DataSource;
- /**
- * @Author: LQ
- * @Date 2024/8/17 14:23
- * @Description: mysql 配置
- */
- @Configuration
- @MapperScan(basePackages = "com.fashion.mapper.mysql",sqlSessionFactoryRef = "mysqlSqlSessionFactory")
- public class MysqlDataSourceConfig {
- @Primary
- @Bean
- public DataSource mysqlDataSource() {
- HikariDataSource dataSource = new HikariDataSource();
- dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/lq");
- dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
- dataSource.setUsername("root");
- dataSource.setPassword("123456");
- return dataSource;
- }
- @Primary
- @Bean
- public SqlSessionFactory mysqlSqlSessionFactory(@Autowired DataSource mysqlDataSource){
- SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
- sessionFactory.setDataSource(mysqlDataSource);
- sessionFactory.setConfigLocation(new ClassPathResource("/mybatis/mybatis-config.xml"));
- try {
- // mapper xml 文件位置
- sessionFactory.setMapperLocations(
- new PathMatchingResourcePatternResolver()
- .getResources("classpath:mybatis/mapper/mysql/*.xml"));
- // sessionFactory.setMapperLocations(new ClassPathResource("/mybatis/mapper/mysql/*.xml"));
- return sessionFactory.getObject();
- } catch (Exception e) {
- e.printStackTrace();
- }
- return null;
- }
- }
复制代码 2.4.2 自界说 UserDetailsService
- package com.fashion.service;
- import com.fashion.domain.LoginSessionUserInf;
- import com.fashion.domain.mysql.TUserInf;
- import com.fashion.exception.CustomerAuthenticationException;
- import com.fashion.mapper.mysql.TUserInfMapper;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.security.core.userdetails.UserDetails;
- import org.springframework.security.core.userdetails.UserDetailsService;
- import org.springframework.security.core.userdetails.UsernameNotFoundException;
- import org.springframework.stereotype.Component;
- import org.springframework.util.ObjectUtils;
- import java.util.Arrays;
- import java.util.List;
- /**
- * @Author: LQ
- * @Date 2024/8/13 21:12
- * @Description:
- */
- @Component
- public class UserDetailsServiceImpl implements UserDetailsService {
- @Autowired
- private TUserInfMapper userInfMapper;
- @Override
- public UserDetails loadUserByUsername(String loginId) throws UsernameNotFoundException {
- // 根据用户名获取用户信息
- if (ObjectUtils.isEmpty(loginId)) {
- throw new CustomerAuthenticationException("用户名不能为空!");
- }
- TUserInf tUserInf = userInfMapper.selectByLoginId(loginId);
- if (ObjectUtils.isEmpty(tUserInf)) {
- throw new CustomerAuthenticationException("用户不存在!");
- }
- // 获取权限信息 todo:后期从数据库查询
- List<String> perList = Arrays.asList("new:query", "news:delete");
- LoginSessionUserInf loginSessionUserInf = new LoginSessionUserInf(tUserInf, perList);
- return loginSessionUserInf;
- }
- }
复制代码 2.4.3 自界说 UserDetails
- package com.fashion.domain;
- import com.alibaba.fastjson.annotation.JSONField;
- import com.fashion.domain.mysql.TUserInf;
- import com.fasterxml.jackson.annotation.JsonIgnore;
- import lombok.Data;
- import org.springframework.security.core.GrantedAuthority;
- import or
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!qidao123.com:ToB企服之家,中国第一个企服评测及软件市场,开放入驻,技术点评得现金 |