2021-10-12-------用户认证登录系统

用户认证登录流程

设计表格

教师和学生
如果添加权限角色是可以的,从教师表格查询登录用户设置为教师角色,从学生表格查询的用户设置为学生角色
t_student(role=student)
t_teacher(role=teacher)
t_roles角色表格

登录流程
最终效果:如果访问后台(增删改查的功能),不能是学生角色,需要时教师角色,如果是学生账号登录,不允许操作后台班级,专业,学生,教师的任何操作,学生账号只能通过首页教学中心查看自己的学科课程
如果实现这个效果,认证中,第一次访问生成用户信息保存,后续访问,通过过滤器判断当前用户身份,如果是学生,只允许访问教学中心查询课程,如果是教师,都允许。
在这里插入图片描述

  1. 用户提供登录表单访问认证中心,传递用户名和密码
  2. 认证中心到数据库查询student ,teacher保存数据到redis拿到key值返回给客户端浏览器cookie。
  3. 客户端登录成功之后,继续访问目标功能,到了zuul网关
  4. 网关从请求中获取cookie,使用key值到redis检查是否存在认证对象,从而返回应有的结果
    • 拒绝访问,没有权限角色
    • 允许访问,通过路由找到后端的微服务

实现认证登录

准备一个可用的redis

单节点,哨兵,redis-cluster
在这里插入图片描述

创建一个认证中心系统

  • maven
  • pom继承
<!--持久层相关-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
        </dependency>
        <!--redis相关-->
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-redis</artifactId>
        </dependency>
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
        </dependency>
  • 属性配置application.properties
server.port=8000
#数据源
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.password=root
spring.datasource.username=root
spring.datasource.url=jdbc:mysql://localhost:3306/aise?useSSL=false
#mybatis
mybatis.mapper-locations=classpath:/mappers/*.xml
mybatis.configuration.map-underscore-to-camel-case=true
#redis相关 单节点2个属性
spring.redis.host=192.168.184.160
spring.redis.port=9000
  • 启动类
@SpringBootApplication
@MapperScan("cn.tedu.auth.mapper")

项目中缺少的内容

  • redisTemplate自定义配置(重新定义序列化key和value类型),key是String序列化,value是java的序列化
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.RedisSerializer;

/**
 * 重新自定义RedisTemplate对象。重新定义序列化
 */
@Configuration
public class RedisConfig {
   
    @Bean("redisTemplate")
    public RedisTemplate initRedisTemplate(RedisConnectionFactory factory){
   
        //重新定义RedisTemplate
        RedisTemplate<String,Object> redisTemplate=new RedisTemplate<String,Object>();
        //重新定义序列化
        redisTemplate.setKeySerializer(RedisSerializer.string());//key值的序列化类型,默认java的object,定义成string
        redisTemplate.setValueSerializer(RedisSerializer.java());
        //设置链接工厂
        redisTemplate.setConnectionFactory(factory);
        return redisTemplate;
    }
}
  • authentication认证用户记录队列
    String account(学生或者教师账号)
    String role(学生或者教师角色)
    Long id(学生或者教师id值)
/**
 * 这个类,在认证登录结束后,要保存登录者信息
 * 所以要存储到redis,并且在网关中要读取
 * 进行序列化操作,实现序列化接口
 */
public class Authentication implements Serializable {
   
    public static final String STUDENT="student";
    public static final String TEACHER="teacher";
    private String account;
    private Long id;
    private String role;
    public String getAccount() {
   
        return account;
    }
    public void setAccount(String account) {
   
        this.account = account;
    }
    public Long getId() {
   
        return id;
    }
    public void setId(Long id) {
   
        this.id = id;
    }
    public String
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值