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 가 존재 하고 조작 에 따라 달라 진 다 는 것 을 설명 할 뿐이다.레 디 스에 신경 쓸 필요 없어 요.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[MeU] Hashtag 기능 개발➡️ 기존 Tag 테이블에 존재하지 않는 해시태그라면 Tag , tagPostMapping 테이블에 모두 추가 ➡️ 기존에 존재하는 해시태그라면, tagPostMapping 테이블에만 추가 이후에 개발할 태그 기반 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.