Spring Security rest 서비스 구축 rememberme 내 기능 기억
6810 단어 springsecurityrememberme
로그 인 할 때 필터 UsernamePassword AuthenticationFilter 에 전송 을 요청 합 니 다.이 필터 인증 이 성공 하면 Remember MeService 를 호출 하여 token 을 생 성하 여 브 라 우 저 쿠키 에 token 을 기록 합 니 다.또한 Remember MeService 에는 Token Repository 가 있 습 니 다.token 과 사용자 정 보 를 데이터베이스 에 기록 합 니 다.이렇게 하면 사용자 가 시스템 에 다시 접근 하여 특정한 인 터 페 이 스 를 방문 할 때 Remember MeAuthenticationFilter 의 필 터 를 거 칩 니 다.그 는 쿠키 에 있 는 token 을 읽 고 Remember Service 에 건 네 줍 니 다.Remember Service 는 Token Repository 로 token 에 따라 데이터베이스 에서 기록 이 있 는 지 확인 하고 기록 이 있 으 면 사용자 이름 을 찾 습 니 다.UserDetailService 를 호출 하여 사용자 이름 에 따라 사용자 정 보 를 얻 은 다음 Security Context 에 넣 습 니 다.
RememberMeAuthenticationFilter
Spring Security 에서 필터 체인 의 마지막 두 번 째 필터 위 치 를 인증 하고 다른 인증 필터 가 인증 에 성공 하지 못 할 때 Remember MeAuthentication Filter 를 호출 하여 인증 을 시도 합 니 다.실현:
1.로그 인 폼 에
<input type="checkbox" name="remember-me" value="true"/>
,SpringSecurity 는SpringSessionRememberMeServices
클래스 에서 상수 하 나 를 정 의 했 습 니 다.기본 값 은 remember-me 입 니 다.2.위의 원리 도 를 통 해 알 수 있 듯 이 TokenRepository 를 설정 하고 생 성 된 token 을 데이터베이스 에 저장 합 니 다.이것 은 bean 을 설정 하 는 설정 입 니 다.Browser Security Config 에 넣 었 습 니 다.
3,configure 에서 설정
4,BrowserProperties 에 자동 로그 인 시간 을 더 해서 내 시간 을 기억 해서 설정 할 수 있 는
//
private int rememberMeSeconds = 10;
package com.imooc.s@Configuration //
public class BrowserSecurityConfig extends WebSecurityConfigurerAdapter{
//
@Autowired
private SecurityProperties securityProperties;
//
@Autowired
private AuthenticationSuccessHandler imoocAuthenticationSuccessHandler;
//
@Autowired
private AuthenticationFailureHandler imoocAuthenticationFailureHandler;
//
@Autowired
private DataSource dataSource;
@Autowired
private UserDetailsService userDetailsService;
// org.springframework.security.crypto.password.PasswordEncoder
@Bean
public PasswordEncoder passwordencoder(){
//BCryptPasswordEncoder implements PasswordEncoder
return new BCryptPasswordEncoder();
}
/**
* TokenRepository ,
* token
* @Description: TokenRepository
* @param @return JdbcTokenRepositoryImpl
* @return PersistentTokenRepository
* @throws
* @author lihaoyang
* @date 2018 3 5
*/
@Bean
public PersistentTokenRepository persistentTokenRepository(){
JdbcTokenRepositoryImpl jdbcTokenRepository = new JdbcTokenRepositoryImpl();
jdbcTokenRepository.setDataSource(dataSource);
// , JdbcTokenRepositoryImpl CREATE_TABLE_SQL
jdbcTokenRepository.setCreateTableOnStartup(true);
return jdbcTokenRepository;
}
// :
@Override
protected void configure(HttpSecurity http) throws Exception {
//
ValidateCodeFilter validateCodeFilter = new ValidateCodeFilter();
//
validateCodeFilter.setAuthenticationFailureHandler(imoocAuthenticationFailureHandler);
// url
validateCodeFilter.setSecurityProperties(securityProperties);
validateCodeFilter.afterPropertiesSet();
// , = +
//http.httpBasic() //
//
http //
.addFilterBefore(validateCodeFilter, UsernamePasswordAuthenticationFilter.class)
//
.formLogin()
.loginPage("/authentication/require") // BrowserSecurityController
// UsernamePasswordAuthenticationFilter url "/login",
.loginProcessingUrl("/authentication/form")
.successHandler(imoocAuthenticationSuccessHandler)//
.failureHandler(imoocAuthenticationFailureHandler) //
.and()
//
.rememberMe()
.tokenRepository(persistentTokenRepository())//TokenRepository, token
.tokenValiditySeconds(securityProperties.getBrowser().getRememberMeSeconds())//
.userDetailsService(userDetailsService) // , userDetailsService
.and()
//
.authorizeRequests()
// /authentication/require: ,securityProperties.getBrowser().getLoginPage():
.antMatchers("/authentication/require",
securityProperties.getBrowser().getLoginPage(),// ,
"/verifycode/image").permitAll() //
.anyRequest() //
.authenticated() //
.and()
.csrf().disable() // csrf
;
}
}ecurity.browser;
그 중에서 데이터베이스 와 접촉 하려 면 데이터 원본 을 주입 해 야 합 니 다:application.properties
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/imooc-demo
spring.datasource.username=root
spring.datasource.password=root
응용 프로그램 을 시작 합 니 다.localhost:8080/user 에 접근 하려 면 로그 인 이 필요 합 니 다.로그 인 성공:
데이터베이스:persistent 생 성logins 표,데이터 저장
서 비 스 를 중단 합 니 다.새 시작(토 큰 표를 저장 하 는
jdbcTokenRepository.setCreateTableOnStartup(true);
을 설명 합 니 다.사용자 로그 인 정보 가 모두 session 에 존재 하기 때문에 서 비 스 를 다시 시작 한 후에 localhost:8080/user 를 방문 합 니 다.로그 인 페이지 로 다시 유도 해 야 하 는데 저 를 기억 하 는 것 이 설정 되 어 있 기 때문에 직접 방문 할 수 있 고 인터페이스 데 이 터 를 얻 었 습 니 다.요청 헤더:
이 쯤 되면 기본 적 인 remember Me 가 완성 되 었 습 니 다.
전체 코드 를 github 에 두 었 습 니 다:https://github.com/lhy1234/spring-security
총결산
위 에서 말씀 드 린 것 은 편집장 님 께 서 소개 해 주신 Spring Security 구축 rest 서비스 입 니 다.rememberme 은 제 기능 을 기억 하고 여러분 께 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 메 시 지 를 남 겨 주세요.편집장 님 께 서 제때에 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
thymeleaf로 HTML 페이지를 동적으로 만듭니다 (spring + gradle)지난번에는 에서 화면에 HTML을 표시했습니다. 이번에는 화면을 동적으로 움직여보고 싶기 때문에 입력한 문자를 화면에 표시시키고 싶습니다. 초보자의 비망록이므로 이상한 점 등 있으면 지적 받을 수 있으면 기쁩니다! ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.