📍필터 추가 - MyFilter1
package com.example.jwt.filter;
import jakarta.servlet.Filter;
import jakarta.servlet.FilterChain;
import jakarta.servlet.ServletException;
import jakarta.servlet.ServletRequest;
import jakarta.servlet.ServletResponse;
import java.io.IOException;
public class MyFilter1 implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
System.out.println("myFilter");
chain.doFilter(request,response); // 다시 chain에다가 넘겨줘야지 끝나지 않고 프로세스가 진행됨
}
}
📍SecurityConfig 코드 추가
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception{
http.addFilterBefore(new MyFilter1(), BasicAuthenticationFilter.class);
http.csrf(AbstractHttpConfigurer::disable);
http.sessionManagement((sessionMenagement)->sessionMenagement.sessionCreat
addFilter가 아니라 addFilterBefore나 addFilterAfter를 써야한다.
⇒ MyFilter는 타입이 필터인데 addFilter는 시큐리티 필터타입을 받기 때문 !
⇒ 이렇게 설정하고 /home 으로 이동하면 필터가 걸리는 것을 확인할수있음 !
📍FilterConfig
package com.example.jwt.config;
import com.example.jwt.filter.MyFilter1;
import jakarta.servlet.FilterRegistration;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class FilterConfig {
@Bean
public FilterRegistrationBean<MyFilter1> filter1(){
FilterRegistrationBean<MyFilter1> bean = new FilterRegistrationBean<>(new MyFilter1());
bean.addUrlPatterns("/*");
bean.setOrder(0); //낮은 번호가 필터중 가장먼저 실행
return bean;
}
}
filterConfig만들어서 걸면됨
📍시큐리티 필터, 필터 순서
→ after나 before나 무조건 시큐리티 필터가 끝난후 나머지 필터가 돌아간다 !
addbefore하고 SecurityContextPersistanceFilter를 입력하면 시큐리티 필터보다 먼저 작동함 !
⇒ http.addFilterBefore(new MyFilter2(), SecurityContextPersistenceFilter.class);
요런식으로 필터2에 인증 코드 넣고 돌리겠습니다 (필터 1은 그냥 출력코드만 남김)
📍MyFilter2
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;
/*
토큰 : cos 이걸 만들어줘야함 , id,pw가 정상적으로 들어와서 로그인이 완료되면 토큰을 만들어주고 그걸 응답해준다
요청할때마다 header에 Authorization에 value값으로 토큰을 가지고 오면 된다.
그때 토큰이 넘어오면 이 토큰이 내가 만든 토큰이 맞는지만 검증하면 된다 (RSA,HA256)
*/
if(req.getMethod().equals("POST")) {
String headerAuth = req.getHeader("Authorizatoin");
System.out.println(headerAuth);
//cos가 들어오면 필터 돌림
if(headerAuth.equals("cos")){
chain.doFilter(req,res);
}
else{
PrintWriter outPrintWriter = res.getWriter();
outPrintWriter.println("인증 안됨");
}
}
dofilter에 추가된 로직
postman으로 확인해보면
body에 잘찍히는 것을 확인할 수 있다.
'Spring' 카테고리의 다른 글
[Spring Security] 카카오 소셜 로그인 적용하기 (0) | 2024.07.08 |
---|---|
[Spring Security] 회원가입, 로그인 테스트 (0) | 2024.07.03 |
[Spring Security] 구글 로그인 분리 + 네이버 로그인 (0) | 2024.07.01 |
[Spring Security] 구글 로그인 (0) | 2024.06.27 |
[Spring Security] @PreAuthorize, @PostAuthorize, @Secured (0) | 2024.06.25 |