[SPRING] 프로그래밍 방식으로 로그인 할 때 생성 된 쿠키를 기억하십시오
SPRING프로그래밍 방식으로 로그인 할 때 생성 된 쿠키를 기억하십시오
등록 직후 (등록) 스프링 보안을 통해 프로그래밍 방식으로 사용자에 로그인하고 있습니다.
public register(HttpServletRequest request, String user, String password) {
...
request.login(user, password);
}
이것은 정상적으로 작동하지만 remember-me 쿠키는 생성하지 않습니다 (대화식 로그인을 사용하면 쿠키가 잘 작성됩니다). 이제이 답변과이 답변을 읽어 보았습니다. RememberMeServices (PersistentTokenBasedRememberMeServices를 사용) 구현을 연결 한 다음 onLoginSuccess를 호출해야합니다. PersistentTokenBasedRememberMeServices를 autowire하는 데 성공하지 못했습니다. 이 작품을 만드는 방법? 이것이 올바른 방법일까요? Spring Security가 더 편리한 방법을 제공하지 않는 이유는 무엇입니까?
P.S .: 이것은 내 구성에서 발췌 한 것입니다.
@Configuration
@EnableWebSecurity
public class WebSecConf extends WebSecurityConfigurerAdapter {
...
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.rememberMe()
.tokenRepository(new MyPersistentTokenRepository())
.rememberMeCookieName("rememberme")
.tokenValiditySeconds(60 * 60 * 24)
.alwaysRemember(true)
.useSecureCookie(true)
.and()
....
...
}
}
해결법
-
==============================
1.Spring 버전은 언급하지 않았습니다. 아래의 설정은 Spring 4에서 작동하지만 다른 버전에서도 수정할 수 있습니다. WebSecConf 클래스에서 PersistentTokenRepository 및 UserDetailsService 인터페이스를 자동으로 호출합니다. Bean을 추가하여 PersistentTokenBasedRememberMeServices 인스턴스를 가져옵니다.
Spring 버전은 언급하지 않았습니다. 아래의 설정은 Spring 4에서 작동하지만 다른 버전에서도 수정할 수 있습니다. WebSecConf 클래스에서 PersistentTokenRepository 및 UserDetailsService 인터페이스를 자동으로 호출합니다. Bean을 추가하여 PersistentTokenBasedRememberMeServices 인스턴스를 가져옵니다.
@Configuration @EnableWebSecurity public class WebSecConf extends WebSecurityConfigurerAdapter { @Autowired PersistentTokenRepository persistenceTokenRepository; @Autowired UserDetailsService userDetailsService; ... @Override protected void configure(HttpSecurity http) throws Exception { http .rememberMe() .tokenRepository(persistenceTokenRepository) .rememberMeCookieName("rememberme") .tokenValiditySeconds(60 * 60 * 24) .alwaysRemember(true) .useSecureCookie(true) .and() .... ... } @Bean public PersistentTokenBasedRememberMeServices getPersistentTokenBasedRememberMeServices() { PersistentTokenBasedRememberMeServices persistenceTokenBasedservice = new PersistentTokenBasedRememberMeServices("rememberme", userDetailsService, persistenceTokenRepository); persistenceTokenBasedservice.setAlwaysRemember(true); return persistenceTokenBasedservice; } }
이제 프로그래밍 방식의 로그인을하는 컨트롤러 또는 클래스에서 PersistentTokenBasedRememberMeServices를 autowire하고 loginSuccess 메소드를 호출하는 메소드 내에 아래 코드를 추가하십시오.
@Autowired PersistentTokenBasedRememberMeServices persistentTokenBasedRememberMeServices; Authentication auth = SecurityContextHolder.getContext().getAuthentication(); if (auth != null){ persistentTokenBasedRememberMeServices.loginSuccess(request, response, auth); }
from https://stackoverflow.com/questions/41241387/no-spring-security-remember-me-cookie-created-when-logging-in-programmatically by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 봄과 아약스 (0) | 2019.04.26 |
---|---|
[SPRING] 휴식 컨트롤러에서 코러스 문제 제거 방법 (0) | 2019.04.26 |
[SPRING] Zuul은 kubernetes에서 서비스로 트래픽을 라우팅 할 수 없습니다. (0) | 2019.04.26 |
[SPRING] 카프카 스프링 통합 : 카프카 소비자에게 헤더가 오지 않는다. (0) | 2019.04.26 |
[SPRING] Java 8 - 매개 변수 플래그로 Spring 부트 응용 프로그램을 컴파일하는 방법 (0) | 2019.04.26 |