Spring Security 2 주 내 자동 로그 인'나 를 기억 해'기능 구현
본 고 는 Spring Security 시리즈 의 한 편 이다.지난 글 에서 저 희 는 User Details Service 와 User Details 인 터 페 이 스 를 실현 함으로써 데이터 베이스 에서 사용자,역할,권한 관련 정 보 를 동적 으로 불 러 와 로그 인 및 권한 수여 와 관련 된 기능 을 실현 합 니 다.이 절 은 이 를 바탕 으로 로그 인 과정 에서 자주 사용 하 는'나 를 기억 해'기능,즉 우리 가 각종 사이트 에 로그 인 할 때 자주 볼 수 있 는'2 주 내 로그 인 면제','3 일 내 로그 인 면제'기능 을 추가 했다.이 기능 의 역할 은 우리 가 로그 인 에 성공 한 후에 일정한 주기 내 에 우리 가 이 사 이 트 를 다시 방문 할 때 다시 로그 인 할 필요 가 없다 는 것 이다.
첫째,가장 간단 한 실천
사실 이 기능 을 실현 하 는 것 은 매우 간단 합 니 다.웹 보안 ConfigurerAdapter 방법 으로 HttpSecurity 를 설정 할 때 remembeMe()방법 을 추가 하면 됩 니 다.다음 코드 에 서 는 Spring Security 로그 인 인증 에 관 한 설정 을 많이 생략 하 였 으 며,이 번 호 는 이전 글 에서 이미 말 하 였 습 니 다)
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.rememberMe(); // ,
}
}
그리고 로그 인 폼 에 checkbox 체크 상 자 를 추가 합 니 다.name 속성의 값 은 현재"remember-me"이 어야 합 니 다.
<label><input type="checkbox" name="remember-me"/> </label>
이렇게 간단 해서 우 리 는 나의 기능 을 기억 하 는 것 을 실현 했다.기본 효 과 는 2 주 내 에 로그 인 을 면제 하 는 것 이다.2.실현 원리
많은 친구 들 이 위의 실현 과정 을 보고 마음 이 멍 해 졌 는 지 이렇게 이 루어 졌 습 니까?이 과정 에서 어떤 일 을 했 는 지 설명해 드 리 겠 습 니 다.
4.567917.우리 가 로그 인 할 때 사용자 이름,비밀 번 호 를 제외 하고 remember-me 도 선택 할 수 있 습 니 다
Remember MeAuthenticationFilter 는 Spring Security 필터 체인 에서 전체적으로 뒤 처 진 위치 에 있 기 때문에 각종 전통 적 인 로그 인 방식 이 검증 을 완료 하지 못 한 경우 에 만 Remember MeAuthenticationFilter 를 가 는 것 도 실제 수요 에 부합 한다.
3.개성 화 된 설정
실제 개발 과정 에서 우 리 는 수요 에 따라 개성 화 된 설정 을 할 수 있다.다음 과 같다.
.rememberMe()
.rememberMeParameter("remember-me-new")
.rememberMeCookieName("remember-me-cookie")
.tokenValiditySeconds(2 * 24 * 60 * 60);
token Validity Seconds 는 token 의 유효기간 을 설정 하 는 데 사 용 됩 니 다.즉,몇 시간 안에 중복 로그 인 을 면제 할 수 있 습 니까?단 위 는 초 입 니 다.설정 을 수정 하지 않 은 상태 에서 기본 값 은 2 주 입 니 다.rememberMeParameter 를 통 해 from 폼 의'자동 로그 인'체크 상자 의 매개 변수 이름 을 설정 합 니 다.여기 서 바 뀌 면 from 폼 에서 checkbox 의 name 속성 에 대응 하 는 변경 사항 입 니 다.기본 값 을 설정 하지 않 으 면 remember-me 입 니 다.
rememberMeCookieName 은 브 라 우 저 에 저 장 된 쿠키 의 이름 을 설정 합 니 다.기본 값 을 설정 하지 않 으 면 remember-me 입 니 다.다음 그림 에서 브 라 우 저의 쿠키 를 보십시오.
4.token 데이터베이스 저장 방식
위 에서 우리 가 말 한 방식 은'나 를 기억 해-자동 로그 인'기능 을 가장 간단하게 실현 하 는 방식 이다.이러한 방식 의 단점 은 token 과 사용자 의 대응 관 계 는 메모리 에 저장 되 어 있 습 니 다.우리 가 응용 프로그램 을 다시 시작 하면 모든 token 이 사라 집 니 다.즉,모든 사용자 가 다시 로그 인해 야 합 니 다.이 를 위해 Spring Security 는 token 을 데이터베이스 에 저장 하 는 방식 도 제공 해 주 었 고 응용 을 다시 시작 하 는 데 도 영향 을 받 지 않 습 니 다.
어떤 글 은 데이터베이스 저장 방식 을 사용 하 는 것 은 이런 방식 이 더욱 안전 하기 때 문 이 라 고 말 하 는데 필 자 는 그렇게 생각 하지 않 는 다.데이터베이스 에 저 장 된 token 은 사용자 이름,비밀번호 MD5 암호 화 문자열 이 아니 라 무 작위 시리 얼 번호 입 니 다.하지만 랜 덤 번호 쿠키 가 납치 되면 효 과 는 같 습 니 다.마치 너의 집에 비밀번호 자물쇠 가 있 는 것 과 같다.네가 열 쇠 를 잃 어 버 린 것 은 네가 비밀 번 호 를 잃 어 버 린 것 과 위해 성 은 같다.
위의 그림 은 token 데이터베이스 저장 방식 의 실현 원리 와 검증 과정 입 니 다.다음은 우리 가 실현 하 겠 습 니 다.우선,데이터베이스 시트 persistent 를 눌 러 야 합 니 다.logins:
CREATE TABLE `persistent_logins` (
`username` varchar(64) NOT NULL,
`series` varchar(64) NOT NULL,
`token` varchar(64) NOT NULL,
`last_used` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`series`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
PersistentTokenRepository 형식의 Spring bean 을 초기 화하 고 시스템 에서 사용 하 는 DataSource 를 이 bean 에 주입 합 니 다.(물론 전 제 는 Spring Boot 의 application.yml 에 DataSource 와 관련 된 연결 속성 을 설정 한 것 입 니 다.더 이상 언급 하지 않 습 니 다)
@Autowired
private DataSource dataSource;
@Bean
public PersistentTokenRepository persistentTokenRepository(){
JdbcTokenRepositoryImpl tokenRepository = new JdbcTokenRepositoryImpl();
tokenRepository.setDataSource(dataSource);
return tokenRepository;
}
마지막 으로 Spring Security 설정 방법 configure(HttpSecurity http)에 다음 과 같은 맞 춤 형 설정 을 추가 합 니 다.
.rememberMe()
.tokenRepository(persistentTokenRepository())
총결산위 에서 설명 한 것 은 편집장 님 께 서 소개 해 주신 Spring Security 가 2 주 내 에 자동 로그 인'나 를 기억 해'기능 을 실현 하 는 것 입 니 다.여러분 께 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 메 시 지 를 남 겨 주세요.편집장 님 께 서 바로 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
만약 당신 이 본문 이 당신 에 게 도움 이 된다 고 생각한다 면,전 재 를 환영 합 니 다.번 거 로 우 시 겠 지만 출처 를 밝 혀 주 십시오.감사합니다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[MeU] Hashtag 기능 개발➡️ 기존 Tag 테이블에 존재하지 않는 해시태그라면 Tag , tagPostMapping 테이블에 모두 추가 ➡️ 기존에 존재하는 해시태그라면, tagPostMapping 테이블에만 추가 이후에 개발할 태그 기반 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.