[SPRING] 스프링 보안 3.1으로 사용자를 프로그래밍 방식으로 로그하는 방법
SPRING스프링 보안 3.1으로 사용자를 프로그래밍 방식으로 로그하는 방법
Spring과 Spring Security 3.1의 특정 사용자 이름 아래에 프로그래밍 방식으로 웹 방문자를 기록하는 적절한 방법은 무엇입니까? 2.5에서 약간의 변화가 있었던 것 같습니다. 지금이 일을하는 데 훨씬 좋은 방법이있을 것이라고 확신합니다.
기본적으로 새 사용자를 만들 때 동시에 로그인해야합니다.
해결법
-
==============================
1.인증 (일반적으로 UsernamePasswordAuthenticationToken)을 작성한 후 호출하십시오.
인증 (일반적으로 UsernamePasswordAuthenticationToken)을 작성한 후 호출하십시오.
SecurityContextHolder.getContext().setAuthentication(authentication)
-
==============================
2.이 세 줄의 코드는 저에게 효과적입니다.
이 세 줄의 코드는 저에게 효과적입니다.
Authentication request = new UsernamePasswordAuthenticationToken( username, password ); Authentication result = authenticationManager.authenticate( request ); SecurityContextHolder.getContext().setAuthentication( result );
-
==============================
3.테스트 목적으로이 작업을 수행하는 데 관심이있는 경우 다음을 수행 할 수 있습니다.
테스트 목적으로이 작업을 수행하는 데 관심이있는 경우 다음을 수행 할 수 있습니다.
UserDetails user = _userService.loadUserByUsername(username); TestingAuthenticationToken token = new TestingAuthenticationToken(user,null); SecurityContextHolder.getContext().setAuthentication(token);
UserDetailsService를 구현하는 것이 사용자 서비스입니다.
-
==============================
4.Spring의 UsernamePasswordAuthenticationFilter를 확장하는 사용자 정의 UsernamePasswordAuthenticationFilter를 작성할 수 있습니다.
Spring의 UsernamePasswordAuthenticationFilter를 확장하는 사용자 정의 UsernamePasswordAuthenticationFilter를 작성할 수 있습니다.
다음은 코드입니다.
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.core.Authentication; import org.springframework.security.core.AuthenticationException; import org.springframework.security.core.userdetails.User; import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; import org.springframework.security.web.authentication.WebAuthenticationDetails; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; public class CustomUsernamePasswordAuthenticationFilter extends UsernamePasswordAuthenticationFilter { @Override protected void successfulAuthentication(HttpServletRequest request, HttpServletResponse response, Authentication authResult) throws IOException, ServletException { super.successfulAuthentication(request, response, authResult); UsernamePasswordAuthenticationToken token = (UsernamePasswordAuthenticationToken) authResult; WebAuthenticationDetails details = (WebAuthenticationDetails) token.getDetails(); String address = details.getRemoteAddress(); User user = (User) authResult.getPrincipal(); String userName = user.getUsername(); System.out.println("Successful login from remote address: " + address + " by username: "+ userName); } @Override protected void unsuccessfulAuthentication(HttpServletRequest request, HttpServletResponse response, AuthenticationException failed) throws IOException, ServletException { super.unsuccessfulAuthentication(request, response, failed); UsernamePasswordAuthenticationToken token = (UsernamePasswordAuthenticationToken) failed.getAuthentication(); WebAuthenticationDetails details = (WebAuthenticationDetails) token.getDetails(); String address = details.getRemoteAddress(); System.out.println("Failed login try from remote address: " + address); } }
from https://stackoverflow.com/questions/7614541/how-to-programmatically-log-user-in-with-spring-security-3-1 by cc-by-sa and MIT license