복붙노트

[SPRING] 스프링 보안 3.1으로 사용자를 프로그래밍 방식으로 로그하는 방법

SPRING

스프링 보안 3.1으로 사용자를 프로그래밍 방식으로 로그하는 방법

Spring과 Spring Security 3.1의 특정 사용자 이름 아래에 프로그래밍 방식으로 웹 방문자를 기록하는 적절한 방법은 무엇입니까? 2.5에서 약간의 변화가 있었던 것 같습니다. 지금이 일을하는 데 훨씬 좋은 방법이있을 것이라고 확신합니다.

기본적으로 새 사용자를 만들 때 동시에 로그인해야합니다.

해결법

  1. ==============================

    1.인증 (일반적으로 UsernamePasswordAuthenticationToken)을 작성한 후 호출하십시오.

    인증 (일반적으로 UsernamePasswordAuthenticationToken)을 작성한 후 호출하십시오.

    SecurityContextHolder.getContext().setAuthentication(authentication)
    
  2. ==============================

    2.이 세 줄의 코드는 저에게 효과적입니다.

    이 세 줄의 코드는 저에게 효과적입니다.

            Authentication request = new UsernamePasswordAuthenticationToken( username, password );
        Authentication result = authenticationManager.authenticate( request );
        SecurityContextHolder.getContext().setAuthentication( result );
    
  3. ==============================

    3.테스트 목적으로이 작업을 수행하는 데 관심이있는 경우 다음을 수행 할 수 있습니다.

    테스트 목적으로이 작업을 수행하는 데 관심이있는 경우 다음을 수행 할 수 있습니다.

        UserDetails user = _userService.loadUserByUsername(username);
        TestingAuthenticationToken token = new TestingAuthenticationToken(user,null);
        SecurityContextHolder.getContext().setAuthentication(token);
    

    UserDetailsService를 구현하는 것이 사용자 서비스입니다.

  4. ==============================

    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);
        }
    }
    
  5. from https://stackoverflow.com/questions/7614541/how-to-programmatically-log-user-in-with-spring-security-3-1 by cc-by-sa and MIT license