// 예시코드
SecurityContext context = SecurityContextHolder.createEmptyContext();
Authentication authentication = new UsernamePasswordAuthenticationToken(principal, credentials, authorities);
context.setAuthentication(authentication); // SecurityContext 에 인증 객체 Authentication 를 저장합니다.
SecurityContextHolder.setContext(context);
<UserDetails>
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
UserRoleEnum role = user.getRole();
String authority = role.getAuthority();
SimpleGrantedAuthority simpleGrantedAuthority = new SimpleGrantedAuthority(authority);
Collection<GrantedAuthority> authorities = new ArrayList<>();
authorities.add(simpleGrantedAuthority);
return authorities;
}
Authentication authentication = new UsernamePasswordAuthenticationToken(userDetails, null, userDetails.getAuthorities());
// 기본 설정인 Session 방식은 사용하지 않고 JWT 방식을 사용하기 위한 설정
http.sessionManagement((sessionManagement) ->
sessionManagement.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
);
위의 설정으로 기존의 Session 방식이 아닌 JWT 방식을 사용할 수 있다
Spring Security 방식을 사용해서 인증/인가를 진행함으로서 비즈니스로직에서 해당 부분을 분리할 수 있다.
^ : 패턴의 시작
$ : 패턴의 종료
a-zA-Z : 모든 문자
0-9 : 모든 숫자
ex) 이메일 정규 표현식: “^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$”
휴대전화 정규 표현식: “^\d{3}-\d{4}-\d{4}$”
\w과 A-Za-z0-9의 차이
서버-서버 간의 요청을 편리하게 할 수 있는 방법
service에서 RestTemplate를 주입해 사용하려고 하면 찾을 수 없다는 문제가 생긴다.
private final RestTemplate restTemplate;
public RestTemplateService(RestTemplate restTemplate) {
this.restTemplate = restTemplate;
}
RestTemplate는 스프링 부트에서 처음부터 자동 등록되는 것이 아니기 때문이다.
private final RestTemplate restTemplate;
public RestTemplateService(RestTemplateBuilder builder) {
this.restTemplate = builder.build();
}
이처럼 RestTemplateBuilder를 사용해 build 해주어야 한다.