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 을 사용 하여 인증 한 것 임 을 표시 합 니 다.테스트 공정 코드 의 주소:공정 예제
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
thymeleaf로 HTML 페이지를 동적으로 만듭니다 (spring + gradle)지난번에는 에서 화면에 HTML을 표시했습니다. 이번에는 화면을 동적으로 움직여보고 싶기 때문에 입력한 문자를 화면에 표시시키고 싶습니다. 초보자의 비망록이므로 이상한 점 등 있으면 지적 받을 수 있으면 기쁩니다! ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.