package com.choigoyo.filter;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class Filter1 implements javax.servlet.Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest)request;
HttpServletResponse res = (HttpServletResponse)response;
String authorization = req.getHeader("Authorization");
System.out.println(authorization);
System.out.println("필터1");
chain.doFilter(req,res);
}
}
HttpServletRequest의 getHeader() 메소드는 요청에 특정 헤더가 없는 경우 null을 반환합니다.
따라서 Authorization 헤더가 없는 요청에서는 null이 출력될 수 있습니다.
postman을 검색하면 다운로드 가능합니다.
테스트 하기 header에 Authorization 값이 들어있지 않아서 null이 들어있었는데,
postman으로 hello라는 값을 post형식으로 넘겨보겠습니다.
정상적으로 값을 출력하는 것을 확인했습니다.
이제는 어떤 조건을 만들어서 조건을 만족하면 컨트롤러와 매핑되고
조건에 부합하지 않으면 컨트롤러에 접근하지 못하도록 필터 코드를 수정해보겠습니다.
if-else 문을 사용해서 조건을 걸어 choigoyo라는 값이 일치하면 컨트롤러와 매핑되어 뷰페이지를 반환하고 아니면 인증실패를 띄우도록 했습니다.
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
public class Filter1 implements javax.servlet.Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest)request;
HttpServletResponse res = (HttpServletResponse)response;
// post 요청일 경우에만
// 토큰이 넘어오면 인증 시도 넘어오지 않으면 컨트롤러로 접근 불가
if (req.getMethod().equals("POST")) {
System.out.println("POST 요청이 확인되었습니다.");
String authorization = req.getHeader("Authorization");
System.out.println(authorization);
System.out.println("필터1");
// header 의 Authorization 이 choigoyo 일때만 체인필터를 타도록 조건 걸기
if (authorization.equals("choigoyo")) {
chain.doFilter(req, res);
} else {
PrintWriter out = res.getWriter();
out.println("인증 실패");
}
}
}
}
사용자의 로그인 정보가 검증되어 사용자를 인증했을 때 토큰을 만들어서
로그인이 완료되면 로그인 완료페이지와 같은 응답과 함게 보내면 됩니다.
토큰을 받은 사용자는 서버에 다른 요청들을 할 때 마다 HTTP 헤더의 Authorization에 value값으로 토큰을 가지고 서버에 요청을 보내게됩니다.
이제 서버는 사용자가 응답과함께 보낸 토큰을 대표적으로 RSA 또는 HS256과 같은 방식으로 검증만 하면 됩니다.