2024年最新整合JPA、Redis实现分布式的Session共享_java jpa redis(2)

2.添加依赖包

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <!-- 改造:添加sql相关的依赖-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.session</groupId>
            <artifactId>spring-session-data-redis</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.session</groupId>
            <artifactId>spring-session-core</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.39</version>
        </dependency>

3.创建application.yml配置文件

server:
  port: 8080
  servlet:
    #设置session过期时间
    session:
      timeout: "PT10M"
spring:
  application:
    name: spring-session-jpa
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    password: syc
    url: jdbc:mysql://localhost:3306/spring-security?useUnicode=true&characterEncoding=utf8&characterSetResults=utf8&useSSL=false&serverTimezone=UTC
  redis:
    host: localhost
    port: 6379
    database: 0
    jedis:
      pool:
        max-idle: 8
        min-idle: 0
        max-active: 8
  session:
    #设置session存储类型
    store-type: redis
  jpa:
    database: mysql
    show-sql: true #开发阶段,打印要执行的sql语句.
    hibernate:
      ddl-auto: update

4.创建User实体类

package com.yyg.boot.entity;
 
import ch.qos.logback.classic.db.names.TableName;
import lombok.Data;
import lombok.ToString;
import org.hibernate.annotations.GenericGenerator;
 
import javax.persistence.*;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
 
/**
 * @Author 一一哥Sun
 * @Date Created in 2020/4/29
 * @Description Description
 */
@Entity
@Table(name="user")
@Data
@ToString
public class User implements Serializable {
 
    @Id
    @GeneratedValue(generator = "idGenerator",strategy = GenerationType.IDENTITY)
    private Long id;
 
    @Column(name = "username")
    @NotBlank(message = "username can not be empty")
    private String username;
 
    @Column(name = "password")
    @NotBlank(message = "password can not be empty")
    private String password;
 
}

5.创建UserRepository仓库类

package com.yyg.boot.repository;
 
import com.yyg.boot.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;
 
/**
 * @Author 一一哥Sun
 * @Date Created in 2020/4/29
 * @Description Description
 */
public interface UserRepository extends JpaRepository<User,Long> {
 
    User findByUsername(String username);
 
    User findByUsernameAndPassword(String username,String password);
 
}

6.创建Service实现类

6.1 创建UserService接口

package com.yyg.boot.service;
 
import com.yyg.boot.entity.User;
 
/**
 * @Author 一一哥Sun
 * @Date Created in 2020/4/29
 * @Description Description
 */
public interface UserService {
    /**
     * save user
     */
    User saveUser(User user);
 
    /**
     * find user by account
     */
    User findByUsername(String username);
 
    /**
     * user login
     */
    User login(String username, String password);
 
}

6.2 创建UserServiceImpl实现类

package com.yyg.boot.service.impl;
 
import com.yyg.boot.entity.User;
import com.yyg.boot.repository.UserRepository;
import com.yyg.boot.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
 
/**
 * @Author 一一哥Sun
 * @Date Created in 2020/4/29
 * @Description Description
 */
@Service
public class UserServiceImpl implements UserService {
 
    @Autowired
    private UserRepository userRepository;
 
    @Override
    public User saveUser(User user) {
        return userRepository.save(user);
    }
 
    @Override
    public User findByUsername(String username) {
        return userRepository.findByUsername(username);
    }
 
    @Override
    public User login(String username, String password) {
        return userRepository.findByUsernameAndPassword(username, password);
    }
 
}

7.创建UserController接口

package com.yyg.boot.web;
 
import com.yyg.boot.entity.User;
import com.yyg.boot.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
 
import javax.servlet.http.HttpSession;
 
/**
 * @Author 一一哥Sun
 * @Date Created in 2020/4/29
 * @Description Description
 */
@RestController
@RequestMapping("/user")
public class UserController {
 
    @Autowired
    private UserService userService;
 
    /**
     * save user
     */
    @PostMapping(value = "/save")
    public User save(@RequestBody User user) {
        return userService.saveUser(user);
    }
 
    /**
     * find user by username
     */
    @GetMapping(value = "/find/{username}")
    public User findUser(@PathVariable String username) {
        return userService.findByUsername(username);
    }
 
    /**
     * user login
     */
    @GetMapping(value = "/login")
    public User login(String username, String password, HttpSession session) {
        User user = userService.login(username, password);
        if(user!=null){
            session.setAttribute(session.getId(),user);
        }
        return user;
    }
 
    @GetMapping(value = "/logout")
    public String logout(HttpSession session){
        session.removeAttribute(session.getId());
        return "user logout success";
    }
 
}

8.添加拦截器,判断session是否有效

package com.yyg.boot.config;
 
import com.alibaba.fastjson.JSON;
import org.springframework.context.annotation.Configuration;
import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
 
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
 
/**
 * @Author 一一哥Sun
 * @Date Created in 2020/4/28
 * @Description 开启Redis Http Session
 */
@Configuration
@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 1800)
public class RedisHttpSessionConfiguration implements WebMvcConfigurer {
 
    /**
     * 添加过滤接口
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new SecurityInterceptor())
                //排除拦截
                .excludePathPatterns("/user/login")
                .excludePathPatterns("/user/logout")
                //拦截路径
                .addPathPatterns("/**");
    }
 
    /**


## 写在最后

**在结束之际,我想重申的是,学习并非如攀登险峻高峰,而是如滴水穿石般的持久累积。尤其当我们步入工作岗位之后,持之以恒的学习变得愈发不易,如同在茫茫大海中独自划舟,稍有松懈便可能被巨浪吞噬。然而,对于我们程序员而言,学习是生存之本,是我们在激烈市场竞争中立于不败之地的关键。一旦停止学习,我们便如同逆水行舟,不进则退,终将被时代的洪流所淘汰。因此,不断汲取新知识,不仅是对自己的提升,更是对自己的一份珍贵投资。让我们不断磨砺自己,与时代共同进步,书写属于我们的辉煌篇章。**


需要完整版PDF学习资源私我



**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化资料的朋友,可以点击这里获取](https://bbs.csdn.net/topics/618540462)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值