일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 서평
- 자바
- 다독
- 독후감
- 경제
- 알고리즘트레이닝
- 알고리즘 공부
- 알고리즘공부
- algorithmTest
- 지혜를가진흑곰
- 화장품
- 백준알고리즘
- C++
- C
- 재테크
- 책알남
- 성분
- 주식
- 책을알려주는남자
- JavaScript
- 프로그래머스 알고리즘 공부
- algorithmStudy
- 프로그래밍언어
- algorithmtraining
- 채권
- Java
- 독서
- 자바스크립트
- 투자
- 돈
Archives
- Today
- Total
탁월함은 어떻게 나오는가?
스프링부트에서 회원가입 할때 [Completed initialization in 1 ms] 까지 뜨고 먹통인 이유 본문
[Snow-ball]프로그래밍(컴퓨터)/프로그래밍 실수
스프링부트에서 회원가입 할때 [Completed initialization in 1 ms] 까지 뜨고 먹통인 이유
Snow-ball 2021. 7. 6. 22:30반응형
스프링부트에서 포스트맨으로 회원가입을 위해서 정보를 보냈다.
하지만, 왠걸? 로딩이 되고 [Completed initialization in 1 ms] 까지 출력되고 더이상 진행이 되지 않았다.
해결방법 :
해결 전
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
@RequiredArgsConstructor
public class SecurityFilter extends OncePerRequestFilter {
private final SecurityProvider provider;
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
String token = provider.resolveToken(request);
try {
if (token != null && provider.validateToken(token)) {
Authentication auth = provider.getAuthentication(token);
SecurityContextHolder.getContext().setAuthentication(auth);
}
} catch (SecurityRuntimeException e) {
SecurityContextHolder.clearContext();
response.sendError(e.getHttpStatus().value(), e.getMessage());
} catch (Exception e) {
e.printStackTrace();
}
}
}
|
cs |
해결 후 : filterChain.doFilter(request, response); 을 빼먹은것이다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
@RequiredArgsConstructor
public class SecurityFilter extends OncePerRequestFilter {
private final SecurityProvider provider;
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
String token = provider.resolveToken(request);
try {
if (token != null && provider.validateToken(token)) {
Authentication auth = provider.getAuthentication(token);
SecurityContextHolder.getContext().setAuthentication(auth);
}
} catch (SecurityRuntimeException e) {
SecurityContextHolder.clearContext();
response.sendError(e.getHttpStatus().value(), e.getMessage());
} catch (Exception e) {
e.printStackTrace();
}
filterChain.doFilter(request, response);
}
}
|
cs |
왜이런 일이 발생한것일까? 그걸 알기위해서는 Spring Security에 대해서 알고 있어야 했다.
Spring Security란?
서버에 URL을 통해 특정 리소스에 누군가가 접근할 때, 그 누군가가 해당 리소스에 대한 권한이 있는지 없는지를 판단하기 위한 과정이 필요하다.
이러한 Authentication(인증) => Authorization(권한부여)의 과정을 스프링에서 Spring Security를 통해 사용하기 쉽게 제공해준다.
Spring Security 동작 방식
1. 클라이언트가 Resource에 URL을 통해 요청을 보낸다.
2. DlegatingFilterProxy는 요청을 가로채서 Spring Security Bean으로 보낸다.
3. Spring Security Bean은 인증 및 권한을 확인한다.
4. 권한이 잘 부여되어 있다면 리소스에 접근을 허용하고 그렇지 않다면 거부한다.
즉, 진행이 되지 않았던 이유는 Spring Security에 가져왔다가 chain 끊겨서 진행이 되지 않았던것이다!! 젠장!!
반응형
'[Snow-ball]프로그래밍(컴퓨터) > 프로그래밍 실수' 카테고리의 다른 글
Comments