복붙노트

[SPRING] 스프링 보안의 수동 인증 로직은 어디로 가야합니까? - 서비스 계층 또는 프리젠 테이션 계층?

SPRING

스프링 보안의 수동 인증 로직은 어디로 가야합니까? - 서비스 계층 또는 프리젠 테이션 계층?

나는이 코드 조각을 가지고있다.

UserDetails userDetails = userDetailsServiceImpl.loadUserByUsername(email);
Authentication authentication = new UsernamePasswordAuthenticationToken(userDetails, userDetails.getPassword(), userDetails.getAuthorities());
SecurityContext securityContext = SecurityContextHolder.getContext();
securityContext.setAuthentication(authentication);
HttpSession session = request.getSession(true);
session.setAttribute("SPRING_SECURITY_CONTEXT", securityContext);

이것은 스프링 보안으로 사용자를 수동으로 인증하는 것입니다. 제 질문은이 코드를 어디에 두어야합니까? 이것을 서비스 레이어에 넣으면 AFAIK가 나쁜 서비스 레이어에 HttpSession 객체를 가져와야합니다. 내가 프레 젠 테이션 레이어에 인증 로직을 배치하는 것이 얼마나 좋은지 잘 모르겠습니다. 어떤 통찰력을 가진 사람 ??

미리 감사드립니다.

해결법

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

    1.Luke Taylor의 질문에 대한 답변을 참조하십시오. 활성 사용자의 UserDetails를 얻는 최선의 방법은 무엇입니까? 이 유형의 일을 수행하는 커스텀 인터페이스를 생성하는 동안 스프링 보안으로부터 코드를 분리하여 유지하는 디자인의 이론적 근거. 예를 들어 MyAuthenticator라는 인터페이스를 작성하고 구현을 작성하여 애플리케이션에 삽입 할 수 있습니다.

    Luke Taylor의 질문에 대한 답변을 참조하십시오. 활성 사용자의 UserDetails를 얻는 최선의 방법은 무엇입니까? 이 유형의 일을 수행하는 커스텀 인터페이스를 생성하는 동안 스프링 보안으로부터 코드를 분리하여 유지하는 디자인의 이론적 근거. 예를 들어 MyAuthenticator라는 인터페이스를 작성하고 구현을 작성하여 애플리케이션에 삽입 할 수 있습니다.

    또한 스프링 보안 필터가 표준 인 경우 HttpSession 객체에 액세스 할 필요가 없습니다. 프레임 워크 필터가 처리합니다. 구현시 다음을 작성해야합니다.

    UserDetails userDetails = userDetailsServiceImpl.loadUserByUsername(email);
    
    Authentication authentication = new UsernamePasswordAuthenticationToken(userDetails, userDetails.getPassword(), userDetails.getAuthorities());
    
    SecurityContextHolder.getContext().setAuthentication(authentication);
    

    "SPRING_SECURITY_CONTEXT"(HttpSessionSecurityContextRepository.SPRING_SECURITY_CONTEXT_KEY)는 이후 버전의 프레임 워크에서 변경 될 수 있으므로 사용하지 않는 것이 좋습니다.

  2. from https://stackoverflow.com/questions/15484139/where-should-the-manual-authentication-logic-in-spring-security-go-service-lay by cc-by-sa and MIT license