helloworld
jwt 임시 토큰 만들어보기 본문
우선 필터에 대한 이해가 필요하다.
필터를 간단하게
public class MyFilter1 implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
System.out.println("필터1");
chain.doFilter(request,response);
}
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
System.out.println("필터1");
chain.doFilter(request,response);
}
}
이런 식으로 만든후
filterConfig이라는 파일을 생성한다
@Configuration
public class FilterConfig {
@Bean
public FilterRegistrationBean<MyFilter1> filter1() {
FilterRegistrationBean<MyFilter1> bean = new FilterRegistrationBean<>(new MyFilter1());
bean.addUrlPatterns("/*");
bean.setOrder(0);//낮은 번호가 필터중 가장 먼저 실행 됨
return bean;
}
public class FilterConfig {
@Bean
public FilterRegistrationBean<MyFilter1> filter1() {
FilterRegistrationBean<MyFilter1> bean = new FilterRegistrationBean<>(new MyFilter1());
bean.addUrlPatterns("/*");
bean.setOrder(0);//낮은 번호가 필터중 가장 먼저 실행 됨
return bean;
}
필터가 많아질 경우에는 빈을 더 추가하여 setOrder 안에 파라미터로 그 순서를 조절 할 수 있다.
securityConfig 파일에
http.addFilterBefore(new MyFilter3(), SecurityContextPersistenceFilter.class);//filterConfig보다 빨리 실행됨
이런식으로 코드를 작성하면 filterConfig보다 빠르게 실행된다. 또한 springSecurity 보다 빨리 실행되게 된다.
우선 대충 컨트롤러에
@PostMapping("/token")
public String token() {
return "<h1>home</h1>";
}
public String token() {
return "<h1>home</h1>";
}
post 메서드를 만든다.
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;
//토큰 : cos 이걸 만들어줘야함. id,pw 정상적으로 들어와서 로그인이 완료되면 토큰을 만들어주고 그걸 응답해준다.
//요청 할 때마다 header에 Authorizaion에 value 값으로 토큰을 가지고 온다.
//그때 토큰이 넘어오면 이 토큰이 내가 만든 토큰이 맞는지 검증만 하면 된다. (RSA, HS256)
if (req.getMethod().equals("POST")) {
System.out.println("POST요청됨");
String headerAuth = req.getHeader("Authorization");
System.out.println("headerAuth = " + headerAuth);
System.out.println("필터3");
if (headerAuth.equals("cos")) {
chain.doFilter(req,res);
}else{
PrintWriter out = res.getWriter();
out.println("인증안됨");
}
}
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;
//토큰 : cos 이걸 만들어줘야함. id,pw 정상적으로 들어와서 로그인이 완료되면 토큰을 만들어주고 그걸 응답해준다.
//요청 할 때마다 header에 Authorizaion에 value 값으로 토큰을 가지고 온다.
//그때 토큰이 넘어오면 이 토큰이 내가 만든 토큰이 맞는지 검증만 하면 된다. (RSA, HS256)
if (req.getMethod().equals("POST")) {
System.out.println("POST요청됨");
String headerAuth = req.getHeader("Authorization");
System.out.println("headerAuth = " + headerAuth);
System.out.println("필터3");
if (headerAuth.equals("cos")) {
chain.doFilter(req,res);
}else{
PrintWriter out = res.getWriter();
out.println("인증안됨");
}
}
}
내가 정해둔 cos라는 토큰?을 만들고 포스트맨에 headers에 밸류값으로 cos가 들어오지 않으면 필터가 작동하지 않고
인증안됨. 이라는 문자만 나온다.


이걸 지금은 내가 지정한 cos로 하였지만 나중엔 RSA나 HS256로 암호화된 토큰을 보내주고 받으며 검증을 해주면 된다.
'jwt' 카테고리의 다른 글
| jwt토큰 만들어서 응답해주기 (0) | 2023.10.20 |
|---|---|
| jwt를 위한 강제 로그인 (1) | 2023.10.20 |
| JWT 를 위한 Security 설정 (0) | 2023.10.19 |
| JWT 구조 이해 (2) | 2023.10.18 |
| RFC 문서 (0) | 2023.10.18 |