Spring session 공유 단일 로그 인 사례 분석 실현

프로젝트 구축
1.사례 설명
본 고 는 주로 단일 로그 인 기능 을 보 여 줍 니 다.주요 설정 과 코드,그리고 필요 한 설명 이 붙 어 있 습 니 다.모든 코드 는 git 주 소 를 참고 하 십시오.session 공유 의 기본 원칙 은 session 을 어 딘 가 에 저장 하 는 것 입 니 다.모든 응용 프로그램 에 접근 할 수 있 습 니 다.여 기 는 redis 로 session 을 저장 합 니 다.인증 이 필요 할 때 redis 에서 사용자 정 보 를 읽 습 니 다.
2.기본 설정
  1)pom.xml

<dependency>
  <groupId>org.springframework.session</groupId>
  <artifactId>spring-session-data-redis</artifactId>
</dependency>
<dependency>
  <groupId>redis.clients</groupId>
  <artifactId>jedis</artifactId>
</dependency>
<dependency>
  <groupId>org.springframework.session</groupId>
  <artifactId>spring-session</artifactId>
  <version>1.3.1.RELEASE</version>
</dependency>
  2)application.properties

server.port=8080
spring.session.store-type = redis
spring.redis.host=192.168.7.151
spring.redis.port=6379
본 사례 의 두 가지 응용 은 똑 같 습 니 다.한 포트 는 8080 이 고 한 포트 는 80 입 니 다.
3.코드 변동
1)SimpleImageCode 를 추가 합 니 다.자바

public class SimpleImageCode implements Serializable{

  private static final long serialVersionUID = 1L;
  private String code;
  private LocalDateTime expireTime;
  
  public SimpleImageCode(String code,LocalDateTime expireTime) {
    this.code = code;
    this.expireTime = expireTime;
  }
  public String getCode() {
    return code;
  }
  public void setCode(String code) {
    this.code = code;
  }
  public LocalDateTime getExpireTime() {
    return expireTime;
  }
  public void setExpireTime(LocalDateTime expireTime) {
    this.expireTime = expireTime;
  }
  public boolean isExpried() {
    return LocalDateTime.now().isAfter(expireTime);
  }
}
이 종 류 는 ImageCode.java 와 기본적으로 같 습 니 다.1:Serializable 인 터 페 이 스 를 실 현 했 습 니 다.구별 2:BufferedImage 속성 이 없습니다.도형 인증 코드 를 session 에 넣 어야 하고 session 는 redis 에 저장 해 야 하기 때문에 직렬 화 인 터 페 이 스 를 실현 해 야 합 니 다.하나의 클래스 는 직렬 화 인 터 페 이 스 를 실현 합 니 다.그 안의 클래스 속성 도 직렬 화 인 터 페 이 스 를 실현 해 야 합 니 다.그러나 BufferedImage 는 jdk 의 클래스 로 직렬 화 인 터 페 이 스 를 실현 할 수 없습니다.그러면 redis 에 넣 지 않 고 검사 할 때 저 희 는 인증 코드 와 만 료 시간 만 검사 하기 때문에 영향 을 주지 않 습 니 다.
2)ValidateCodeController.java 수정

@GetMapping("/code/image")
public void createCode(HttpServletRequest request,HttpServletResponse response) throws Exception {  
    ImageCode imageCode = createImageCode(request);
    SimpleImageCode simpleImageCode = new SimpleImageCode(imageCode.getCode(),imageCode.getExpireTime());
    //request.getSession().setAttribute("imageCodeSession", imageCode);
    request.getSession().setAttribute("imageCodeSession", simpleImageCode);//    redis 
    ImageIO.write(imageCode.getImage(), "JPEG", response.getOutputStream());
 }
Simple ImageCode 를 session 에 넣 기
3)ValidateCodeFilter.java 수정

private void validate(HttpServletRequest request){
  //ImageCode codeInSession = (ImageCode)request.getSession().getAttribute("imageCodeSession");
   SimpleImageCode codeInSession = (SimpleImageCode)request.getSession().getAttribute("imageCodeSession");
   String codeInRequest = request.getParameter("imageCode");
   ... ...//       
   request.getSession().removeAttribute("imageCodeSession");
  }
인증 코드 를 검사 하기 전에 session 에서 Simple ImageCode 를 꺼 냅 니 다.
2.테스트 검증
1)redis,80 포트 응용,8080 포트 응용 을 시작 하고 redis 정보 가 비어 있 는 지 확인 합 니 다.다음 과 같 습 니 다.
  
2)브 라 우 저 입력:localhost:8080/index.html,로그 인 페이지 로 이동,redis 보기,아래:

3)로그 인 후 redis 를 보면 다음 과 같다.

4)같은 브 라 우 저 입력:localhost/index.html,index 페이지 로 바로 이동 하여 redis 를 봅 니 다.다음 과 같 습 니 다.

5)index.html 에서 연결 을 종료 하려 면 redis 를 클릭 하 십시오.다음 과 같 습 니 다.

6)localhost:8080/index.html 를 다시 방문 하여 로그 인 페이지 로 이동 하여 redis 를 확인 합 니 다.다음 과 같 습 니 다


7)8080 의 응용 프로그램 에 다시 로그 인하 여 redis 를 보십시오.다음 과 같 습 니 다.

테스트 를 통 해 단일 로그 인 이 이 루어 진 것 을 발견 하 였 습 니 다.캡 처 를 붙 이 는 것 은 session 에 redis 가 존재 하고 조작 에 따라 달라 진 다 는 것 을 설명 할 뿐이다.레 디 스에 신경 쓸 필요 없어 요.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기