spring security 다음 자동 로그 인 기능 프로 세 스 분석 실현

이 글 은 주로 spring security 가 제 다음 자동 로그 인 기능 을 기억 하 는 것 을 소개 합 니 다.글 에서 예시 코드 를 통 해 매우 상세 하 게 소개 되 었 고 여러분 의 학습 이나 업무 에 대해 어느 정도 참고 학습 가 치 를 가지 기 때문에 필요 한 친 구 는 참고 하 실 수 있 습 니 다.
원리 분석
처음 로그 인 할 때 사용자 가 readme 옵션 을 선택 하면 로그 인 에 성공 하면 springsecurity 는 브 라 우 저 에 쿠키 를 생 성하 여 되 돌려 줍 니 다.브 라 우 저가 다음 에 방문 할 때 이 쿠키 를 가지 고 있 으 면 springsecurity 는 이번 방문 을 허용 합 니 다.
2.실현 방식
2.1 단순 실현 방식
(1)springsecurity 설정 파일 에 http 노드 에 remember-me 설정 을 추가 합 니 다.

<security:http auto-config="true" use-expressions="false">
  <!--       ,         ROLE_USER  ,      
              -->
  <security:intercept-url pattern="/**" access="ROLE_USER"/>

  <!--       -->
  <security:form-login login-page="/login.html" login-processing-url="/login"
        username-parameter="username" password-parameter="password"
        authentication-failure-forward-url="/failed.html"
        default-target-url="/index.html"

  />
  <!--  csrf,      -->
  <security:csrf disabled="true"/>

  <security:remember-me remember-me-parameter="remembermeParamater" />
  <!--    -->
  <security:logout invalidate-session="true" logout-url="/logout.do" logout-success-url="/login.html"/>
 </security:http>
그 중에서 remember-me-parameter="remembermParamater"는 프론트 데스크 에서 전달 할 rememberme 의 매개 변수 이름 을 지정 합 니 다.프론트 데스크 에서 전달 할 매개 변수 값 은 true 또는 false 입 니 다.
(2)프론트 로그 인 페이지 에 checkbox 추가

<form action="/login" method="post">
     :<input type="text" name="username" placeholder="      "><br>
     :<input type="password" name="password" placeholder="     "><br>
     :<input id="_spring_security_remember_me" type="checkbox" name="remembermeParamater" value="true">
  <input type="submit" value="  ">
 </form>
checkbox 의 name 속성 은 위 설정 파일 의 remember-me-parameter="rememberme Paramater"와 일치 해 야 합 니 다.
(3)테스트
프로젝트 를 시작 하여 로그 인 을 하고 로그 인 에 성공 한 후 쿠키 를 관찰 하면 서버 에서 remember-me 라 는 쿠키 를 되 돌려 줍 니 다.

현재 브 라 우 저 를 닫 고 다시 열 고 방문 합 니 다.쿠키 를 지우 지 않 으 면 자원 에 직접 접근 할 수 있 습 니 다.다시 로그 인 할 필요 가 없습니다.
이러한 방식 은 단점 이 있 습 니 다.브 라 우 저 측 이 지 니 고 있 는 이 쿠키 값 서버 는 메모리 에 저장 되 어 있 으 며 지속 되 지 않 기 때문에 서비스 가 재 개 되면 서버 측 에 저 장 된 이 값 을 잃 어 버 리 고 브 라 우 저 측의 rememberme 은 효력 을 잃 습 니 다.이 문 제 를 해결 하기 위해 서 는 서버 에서 생 성 된 이 쿠키 값 을 데이터베이스 에 영구적 으로 유지 해 야 합 니 다.
2.2 데이터베이스 구현 방식
(1)rememberme 의 기록 을 지속 적 으로 만 드 는 시 계 를 만 듭 니 다.
--remembme 기록 을 작성 하 는 표

CREATE TABLE persistent_logins
(
 username VARCHAR(64),
 series VARCHAR(64),
 token  VARCHAR(64),
 last_used DATE 
 );
(2)spring-security 설정 파일 의 remembme 탭 내용 을 다음 과 같이 변경 합 니 다.

<security:remember-me remember-me-parameter="remembermeParamater" data-source-ref="dataSource"
        token-validity-seconds="86400"/>
data-source-ref="dataSource"는 데이터 원본 을 지정 하 는 데 사 용 됩 니 다.spring-security 는 데이터 원본 을 통 해 데이터 베이스 중의 persistent 를 조작 합 니 다.logins 표
token-validity-seconds 는 rememberme 의 유효 시간 을 나타 내 고 초 단위 로 이곳 의 86400=24*3600 은 하루 를 나타 낸다.
(3)테스트
프로젝트 시작,로그 인,로그 인 성공 후 persistentlogins 표 에 기록 을 생 성 합 니 다.

브 라 우 저 를 닫 고 다시 방문 할 때 브 라 우 저 에 있 는 쿠키 값 에 따라 데이터베이스 에 있 는 이 기록 을 찾 습 니 다.조회 되면 인증 합 니 다.
3.비밀번호 로그 인 인지 remembme 로그 인 인지 구분
사용자 가 민감 한 작업 을 할 때 remembme 로그 인 여 부 를 구분 해 야 합 니 다.로그 인 페이지 로 이동 해 야 한다 면.
congtroller 층 에서 판단 하 는 방법 을 제공 합 니 다.

@GetMapping("/isRemembermeUser")
public boolean isRemembermeUser(){
 Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
 if(authentication==null){
  return false;
 }
 //           rememberme  ,   true,   false
 return RememberMeAuthenticationToken.class.isAssignableFrom(authentication.getClass());
}
먼저 비밀번호 로 로그 인,접근http://localhost/user/isRemembermeUser.do백 엔 드 인 터 페 이 스 는 false 로 돌아 가 고 브 라 우 저 를 닫 고 이 주 소 를 다시 방문 합 니 다.백 엔 드 인 터 페 이 스 는 true 로 돌아 가 이번 에는 rememberme 을 사용 하여 인증 한 것 임 을 표시 합 니 다.
테스트 공정 코드 의 주소:공정 예제

좋은 웹페이지 즐겨찾기