当前位置:   article > 正文

一个简单的单点登录系统(springboot+jpa+redis+mysql)_springboot+jpa + redis简单登录项目

springboot+jpa + redis简单登录项目

 

单点登录系统是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。它包括可以将这次主要的登录映射到其他应用中用于同一个用户的登录的机制。它是目前比较流行的企业业务整合的解决方案之一。

 中间sso这一块就是单点登录系统的逻辑,单点登录系统是给其他客户端(portal端、安卓端、ios端)使用

首次登录生成token存储在redis中时效为5分钟,五分钟内如果有操作会刷新时效,无操作则在操作时会跳转到登录页面,sso只负责登录、注册、校验token时效不负责跳转,由客户端调用判断sso返回结果进行跳转。

系统结构:

Redis工具类:

  1. package com.sso.sso.util;
  2. import com.alibaba.fastjson.JSON;
  3. import com.google.gson.JsonObject;
  4. import com.sso.sso.pojo.User;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.context.annotation.Configuration;
  7. import org.springframework.data.redis.core.RedisTemplate;
  8. import org.springframework.stereotype.Component;
  9. import org.springframework.util.DigestUtils;
  10. import java.util.concurrent.TimeUnit;
  11. @Component
  12. public class RedisUtil {
  13. @Autowired
  14. private RedisTemplate<String,String> redisTemplate;
  15. //设置key-value
  16. public void set(String key,Object value){
  17. String valueString = JSON.toJSONString(value);
  18. redisTemplate.opsForValue().set(key,valueString);
  19. }
  20. //设置key-value 加时长
  21. public void set(String key,Object value,int seconds){
  22. String valueString = JSON.toJSONString(value);
  23. redisTemplate.opsForValue().set(key,valueString,seconds, TimeUnit.SECONDS);
  24. }
  25. //获取value
  26. public String get(String key){
  27. return redisTemplate.opsForValue().get(key);
  28. }
  29. //获取value转对象
  30. public Object get(String key,Class cls){
  31. String value = redisTemplate.opsForValue().get(key);
  32. return JSON.parseObject(value,cls);
  33. }
  34. //获取value转对象
  35. public void delete(String key){
  36. redisTemplate.delete(key);
  37. }
  38. public void expire(String key,int seconds) {
  39. redisTemplate.expire(key,seconds,TimeUnit.SECONDS);
  40. }
  41. }

 

JPA:

  1. package com.sso.sso.repository;
  2. import com.sso.sso.pojo.User;
  3. import org.springframework.data.jpa.repository.JpaRepository;
  4. public interface UserRepository extends JpaRepository<User,Integer> {
  5. User findUserByUserName(String userName);
  6. }

SERVICE:

  1. package com.sso.sso.service.impl;
  2. import com.sso.sso.pojo.User;
  3. import com.sso.sso.repository.UserRepository;
  4. import com.sso.sso.service.UserService;
  5. import com.sso.sso.util.RedisUtil;
  6. import io.lettuce.core.RedisClient;
  7. import org.springframework.beans.factory.annotation.Autowired;
  8. import org.springframework.boot.autoconfigure.data.redis.RedisProperties;
  9. import org.springframework.data.redis.core.RedisTemplate;
  10. import org.springframework.stereotype.Service;
  11. import org.springframework.util.DigestUtils;
  12. import java.util.UUID;
  13. @Service("UserService")
  14. public class UserServiceImpl implements UserService {
  15. @Autowired
  16. private RedisUtil redisUtil;
  17. @Autowired
  18. private UserRepository repository;
  19. @Override
  20. public void registerUser(String userName,String password) {
  21. User user = new User(userName,DigestUtils.md5DigestAsHex(password.getBytes()));
  22. repository.save(user);
  23. }
  24. @Override
  25. public String userLogin(String userName,String password) {
  26. String token = String.valueOf(UUID.randomUUID());
  27. User user = repository.findUserByUserName(userName);
  28. try{
  29. if(null !=user && user.getUserPassword().equals(DigestUtils.md5DigestAsHex(password.getBytes()))){
  30. redisUtil.set(token+":"+user.getUserName(),user,5*60);
  31. return token;
  32. }
  33. }catch (Exception e){
  34. return "登录失败";
  35. }
  36. return "登录失败";
  37. }
  38. @Override
  39. public String checkToken(String userName, String token) {
  40. String key = token+":"+userName;
  41. Object obj = redisUtil.get(key,User.class);
  42. if(null != obj && ((User)obj).getUserName().equals(userName)){
  43. redisUtil.expire(key,5*60);
  44. return token;
  45. }
  46. return "登录过期,请重新登录";
  47. }
  48. }

CONTROLLER:

  1. package com.sso.sso.controller;
  2. import com.sso.sso.service.UserService;
  3. import org.springframework.beans.factory.annotation.Autowired;
  4. import org.springframework.web.bind.annotation.RequestMapping;
  5. import org.springframework.web.bind.annotation.RestController;
  6. import javax.servlet.http.Cookie;
  7. import javax.servlet.http.HttpServlet;
  8. import javax.servlet.http.HttpServletRequest;
  9. import javax.servlet.http.HttpServletResponse;
  10. @RestController
  11. @RequestMapping("/user")
  12. public class UserController {
  13. @Autowired
  14. private UserService userService;
  15. @RequestMapping("/register")
  16. public String register(String userName,String password){
  17. userService.registerUser(userName,password);
  18. return "Ok";
  19. }
  20. @RequestMapping("/checkLogin")
  21. public String checkLogin(String userName, String token){
  22. return userService.checkToken(userName,token);
  23. }
  24. @RequestMapping("/login")
  25. public String login(String userName, String password){
  26. String result = userService.userLogin(userName,password);
  27. return result;
  28. }
  29. }

User.java

  1. package com.sso.sso.pojo;
  2. import lombok.Data;
  3. import org.hibernate.annotations.DynamicInsert;
  4. import org.hibernate.annotations.DynamicUpdate;
  5. import org.hibernate.annotations.GenericGenerator;
  6. import org.springframework.format.annotation.DateTimeFormat;
  7. import javax.persistence.*;
  8. import java.util.Date;
  9. @Data
  10. @Entity
  11. @DynamicInsert
  12. @DynamicUpdate
  13. public class User {
  14. @Id
  15. @GeneratedValue(strategy = GenerationType.IDENTITY)
  16. private Integer userId;
  17. private String userName;
  18. private String userPassword;
  19. @Temporal(TemporalType.TIMESTAMP)
  20. private Date createTime;
  21. @Temporal(TemporalType.TIMESTAMP)
  22. private Date updateTime;
  23. public User() {
  24. }
  25. public User(String userName, String userPassword) {
  26. this.userName = userName;
  27. this.userPassword = userPassword;
  28. }
  29. }

 

application配置文件:

  1. spring:
  2. jpa:
  3. show-sql: true
  4. datasource:
  5. driver-class-name: com.mysql.jdbc.Driver
  6. username: root
  7. password: ppc123456
  8. url: jdbc:mysql://localhost:3306/****?characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8
  9. redis:
  10. database: 0
  11. host: 192.168.**.**
  12. port: 6379
  13. password:
  14. jedis:
  15. pool:
  16. max-active: 8
  17. max-wait: -1
  18. min-idle: 0
  19. max-idle: 8
  20. timeout: 50000

user表

  1. CREATE TABLE `user` (
  2. `user_id` int(11) NOT NULL AUTO_INCREMENT,
  3. `user_name` varchar(64) NOT NULL COMMENT '名字',
  4. `user_password` varchar(64) NOT NULL,
  5. `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  6. `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
  7. PRIMARY KEY (`user_id`)
  8. ) ENGINE=InnoDB AUTO_INCREMENT=2004 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='用户表';

pom.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <parent>
  6. <groupId>org.springframework.boot</groupId>
  7. <artifactId>spring-boot-starter-parent</artifactId>
  8. <version>2.1.4.RELEASE</version>
  9. <relativePath/> <!-- lookup parent from repository -->
  10. </parent>
  11. <groupId>com.sso</groupId>
  12. <artifactId>sso</artifactId>
  13. <version>0.0.1-SNAPSHOT</version>
  14. <name>sso</name>
  15. <description>Demo project for Spring Boot</description>
  16. <properties>
  17. <java.version>1.8</java.version>
  18. </properties>
  19. <dependencies>
  20. <dependency>
  21. <groupId>org.springframework.boot</groupId>
  22. <artifactId>spring-boot-starter-data-jpa</artifactId>
  23. </dependency>
  24. <dependency>
  25. <groupId>org.springframework.boot</groupId>
  26. <artifactId>spring-boot-starter-data-redis</artifactId>
  27. </dependency>
  28. <dependency>
  29. <groupId>com.google.code.gson</groupId>
  30. <artifactId>gson</artifactId>
  31. </dependency>
  32. <dependency>
  33. <groupId>mysql</groupId>
  34. <artifactId>mysql-connector-java</artifactId>
  35. </dependency>
  36. <dependency>
  37. <groupId>org.springframework.boot</groupId>
  38. <artifactId>spring-boot-starter-test</artifactId>
  39. <scope>test</scope>
  40. </dependency>
  41. <dependency>
  42. <groupId>org.projectlombok</groupId>
  43. <artifactId>lombok</artifactId>
  44. <version>1.18.6</version>
  45. </dependency>
  46. <dependency>
  47. <groupId>com.alibaba</groupId>
  48. <artifactId>fastjson</artifactId>
  49. <version>1.2.3</version>
  50. </dependency>
  51. <dependency>
  52. <groupId>org.springframework.boot</groupId>
  53. <artifactId>spring-boot-starter-web</artifactId>
  54. </dependency>
  55. <dependency>
  56. <groupId>org.hibernate.validator</groupId>
  57. <artifactId>hibernate-validator</artifactId>
  58. <version>6.0.16.Final</version>
  59. <scope>test</scope>
  60. </dependency>
  61. </dependencies>
  62. <build>
  63. <plugins>
  64. <plugin>
  65. <groupId>org.springframework.boot</groupId>
  66. <artifactId>spring-boot-maven-plugin</artifactId>
  67. </plugin>
  68. </plugins>
  69. </build>
  70. </project>

 

项目代码github地址:https://github.com/TBirdsWR/sso.git

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/神奇cpp/article/detail/815267
推荐阅读
相关标签
  

闽ICP备14008679号