스프링 보안을 사용하는 응용 프로그램이 있습니다. 가입 프로세스에서 새 사용자 엔티티가 해시 된 비밀번호로 유지되고 활성화 토큰을 포함하는 이메일이 사용자에게 전송됩니다. 이 토큰을 클릭하면 사용자가 토큰별로 사용자를 조회하고 사용자를 활성화 한 다음 응용 프로그램으로 리디렉션하는 UserActivationServlet으로 이동합니다. 나는 자동으로 응용 프로그램에 사용자가 로그 싶습니다 여기이스프링 보안이있는 자동 로그인
private void authenticateUserAndSetSession(HttpServletRequest request, User u) {
UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(
u.getUsername(), u.getPassword()); //PROBLEM: THIS PASSWORD IS HASHED
// generate session if one doesn't exist
request.getSession();
token.setDetails(new WebAuthenticationDetails(request));
Authentication authenticatedUser = authenticationManager.authenticate(token);
SecurityContextHolder.getContext().setAuthentication(authenticatedUser);
request.getSession().setAttribute(HttpSessionSecurityContextRepository.SPRING_SECURITY_CONTEXT_KEY,
SecurityContextHolder.getContext());
}
문제를 어떻게 내 서블릿에서이 방법이 작성 될 때 사용자 개체의 암호 필드가 해시되었다는 점이다를 포함했다. 그래서 내가 생각할 수있는 유일한 다른 옵션은 서블릿에 요청 매개 변수로 unhashed 암호를 전달하는 것입니다. (불쾌합니다.)
내가 놓친 것이 있습니까? 사용자를 사전 인증하는 다른 방법이 있습니까?
감사 SOA 당신을 도울 수 내가 제대로 이해하면
, 사용자가 활성화 링크를 클릭하고 우리는 보았다 : 다음과 같이 그냥 만드는, 그래서
authenticationManager
와 함께 토큰을 생성 할 때 자격 증명을 사용할 필요 그를 다시 인증하지 그 사람이 분명히 우리에게는 유효한 사용자가 있으므로 아무 것도 없습니다. authenticationManager로 다시 인증해야하고 토큰을 만들 때 자격 증명을 사용할 필요가 없으므로 다음과 같이 작성하면됩니다. PreAuthenticatedAuthenticationToken token = new PreAuthenticatedAuthenticationToken ( p, null, p.getAuthorities()); –또 다른 비슷한 질문 (및 대답)은 여기에서 찾을 수 있습니다. http://stackoverflow.com/a/12057327/26510 –
@ClintonBosch 의견을 답으로 쓰고 받아 들일 수 있습니다. – fglez