동작 방식
453
작성한 질문수 27
안녕하세요 선생님! 훌륭한 강의 잘보고 있습니다.
해당 파트를 공부하는데 있어 스프링 시큐리티의 동작 방식이 궁금합니다.
1. 필터
http.authorizeRequests().antMatchers("/**")
.hasIpAddress("127.0.0.1") //<--ip
.and()
.addFilter(getAuthenticationFilter());
여기서 addFilter 메서드는 단순 welcome api를 요청하여도 필터가 동작하나요 아니면 로그인 할때만 필터가 동작하나요?
2. attemptAuthentication 메서드
//로그인 시도하면 가장 먼저 실행됨
@Override
public Authentication attemptAuthentication(HttpServletRequest request,
HttpServletResponse response) throws AuthenticationException {
try {
//전달되어진 inputStream 을 자바 클래스 파일로 변환
RequestLogin creds = new ObjectMapper().readValue(request.getInputStream(), RequestLogin.class);
//사용자가 입력한 값을 토큰으로 바꾸고 인증 처리를 하는 매니저에게 넘기면 아이디와 패스워드를 비교
//토큰 만듬
return getAuthenticationManager().authenticate(
//토큰으로 변환
new UsernamePasswordAuthenticationToken(
creds.getEmail(),
creds.getPassword(),
new ArrayList<>()
)
);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
로그인 시 가장 먼저 실행되는 메서드의 반환 값이 Authentication 객체인데, 그 객체가 아래 메서드에 사용되나요?
그 이유가 loadUseByUsername 메서드의 파라미터에 값을 넣어 준적이 없는 내부적으로 파라미터를 Authentication 객체의 값을 활용하나요?
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
//순서 2
UserEntity findUser = userRepository.findByEmail(username);
if (findUser == null) {
throw new UsernameNotFoundException(username);
}
//User라는 객체로 success 메서드에서 사용 --> (User)authResult.getPrincipal()
return new User(findUser.getEmail(), findUser.getEncryptedPwd(),
true, true, true, true, new ArrayList<>());
}
로그인 시 순서:
1. attemptAuthentication 메서드 실행하여 Authentication(토큰) 객체 반환
2. loadUserByUsername 실행하여 Authentication 객체를 활용 하여 UserDetails 객체 반환
3. successfulAuthentication 실행하는데 UserDetails 객체 활용
가 맞나요..? 제가 나름 이해한대로 써봤습니다..
로그인 시 메서드의 호출 순서를 알고싶습니다. 또한 각 메서드의 반환 값이 서로 어떻게 연관이 있는지 궁금합니다.
spring security가 굉장히 어렵다고는 알고있는데.. 정리가 잘안되네요ㅜㅜ 두서 없이 쓴거같아 죄송합니다. 선생님의 강의를 보며 어제보다 나은 실력을 겸비하는거 같아 항상 감사합니다.
답변 1
1
안녕하세요, 이도원입니다.
답변이 늦어 죄송합니다. 질문에 답변을 했었다고 생각했습니다.
문의 하신 내용에 간략히 답을 드리면,
1. UsernamePasswordAuthenticationFilter를 상속하는 AuthenticationFilter는 로그인 시 Spring Security에 의해 사용됩니다.
2. UsernamePasswordAuthenticationFilter -> AuthenticationManager -> AuthneticationProvider -> UserDetailService 순으로 사용됩니다.
3. 인증이 성공한 다음, successfulAuthentication 메소드에서 바로 결과를 반환해도 되지만, JWT를 생성하기 위해, UserService의 getUserByUserId 메소드를 호출하였습니다.
추가 궁금하신 점이 있으시면, 다시 글 남겨 주세요.
감사합니다.
kafka 업데이트 강의 듣고 시포요
0
114
2
강의 교안
0
105
2
마이크로서비스간 통신 시, 인증 처리
0
115
2
api gateway 에서 인증 처리
0
76
1
섹션 19 질문드립니다
0
84
2
강의 자료 업데이트
0
105
2
부하분산 강의 섹션
0
65
1
강의자료는 어디에서?
0
98
2
강의 자료는 어디서 다운 받을 수 있나요?
0
131
2
전체 사용자 조회시 오류
0
65
1
혹시 pk 외 별도의 id 를 부여한 이유가 있을까요 ??
0
120
2
학습 방향
0
105
2
카프카 커넥터 사용 목적 문의
0
90
2
kafka 강의
0
117
2
서비스 디스커버리 종류
0
90
2
강의 자료에 대해서 궁금해요
0
125
2
GlobalFilter, LoggingFilter가 동작하지 않습니다.
0
94
2
Kafka Source Connect 버전 에러
0
95
2
소스커넥터는 사용안한 거 맞죠?
0
84
2
강의자료 업데이트 문의
0
99
2
강의에서 BCryptPasswordEncoder 에 역할(5-2)
0
63
1
강의 업데이트 계획이 궁금합니다.
0
120
2
MSA 애플리케이션에 Spring Web과 Spring Data JPA를 사용하는 것이 바람직한지 궁금합니다. (MSA 설계와 관련된 질문입니다)
0
168
2
어떤 것이 업데이트 된 건가요?
0
169
2





