Servlet Filter์ ํ์์ฑ
- ์๋น์ค ๋ก์ง์ ๋ก๊ทธ์ธ ํ์ธ ์ฌ๋ถ ์ฝ๋๊ฐ ๋ค์ด๊ฐ!
- ์ค๋ณต๋๋ ์ฝ๋๋ค
public void addCart(final Long productId, final String token) {
final boolean isValid = jwtTokenProvider.valdiateToken(token);
if(!isValid) {
throw new UnauthroizedTokenException();
}
final String email = jwtTokenProvider.getPayload(token);
--- ์๋น์ค ๋ก์ง---
}
public List<Cart> getCart(final String token) {
final boolean isValid = jwtTokenProvider.valdiateToken(token);
if(!isValid) {
throw new UnauthroizedTokenException();
}
final String email = jwtTokenProvider.getPayload(token);
--- ์๋น์ค ๋ก์ง---
}
์ฌ์ฉ์ ์ธ์ฆ์ ์ ๊ฑฐํ๊ณ ํต์ฌ๋ก์ง๋ง์ ๋จ๊ธฐ๊ณ ์ ๋ฆฌ๋ ์ฝ๋
public void addCart(final Long productId, final Customer customer) {
boolean isExist = cartItemDao.existProduct(customer.getId(), productId);
if(isExist) {
throw nuew DuplicatedProductInCartException();
}
Product product = productService.findProductById(productId);
cartItemDao.addCartItem(customer.getId(), product.getId());
}
public List<Cart> getCarts(Customer customer) {
return cartItemDao.getCartsByCustomerId(customer.getId());
}
์ ๊ฑฐ๋ ์ฌ์ฉ์์ธ์ฆ ! -> Filter๋ Interceptor๋ฅผ ์ด์ฉํด์ ๋ถ๋ฆฌ
Servlet Filter
Filter๋ J2EE ํ์ค ์คํ์ผ๋ก Servlet API 2.3๋ถํฐ ๋ฑ์ฅํ์๊ณ Dispatcher Servlet์ ์์ฒญ์ด ์ ๋ฌ๋๊ธฐ ์ , ํ์ ๋ถ๊ฐ ์์ ์ ์ฒ๋ฆฌํ๋ ๊ฐ์ฒด.
์ ๊ณตํ๋ ๋ฉ์๋
init()
@Override
public void init(final FilterConfig filterConfig) thorws ServletException {
}
doFilter() : ์์ฒญ์ด ๋ค์ด์ฌ๋๋ง๋ค ์คํ
@Override
public void doFilter(final ServletRequest request, final ServletResponse response, final FilterChain chain) {
log.info("LoginFilter.doFilter");
HttpServletRequest servletRequest = (HttpServletRequest) request;
try {
validateToken(servletRequest);
chain.doFIlter(request, response);
} catch (Exception e) {
HttpServletResponse servletResponse = (HttpServletResponse) response;
servletResponse.setStatus(HttpStatus.UNATHORIZED.value());
}
}
destroy()
WAS๊ฐ ๋ซํ๊ธฐ์ ์ connection ํ์ด ๋ซํ๋ค.
์๋ธ๋ฆฟ ํํฐ ๋ฑ๋ก ๋ฐฉ๋ฒ
๋ชจ๋ URL์ ์ ์ฉ๋จ
@Slf4j
@Component
public class LoginFilter implements Filter {
}
- ํน์ URL์ ์ ์ฉํ๊ณ ์ถ์๋
@WebFilter(urlPatterns="")
@Slf4j
@WebFilter(urlPatterns ="/users/me/*")
public class LoginFilter implements Filter {
}
@SpringBootApplication
@ServletComponentScan
public class Application {
}
- FilterRegistrationBean
: ์์์ ํน์ URL ์ ์ฉ
@Bean
public FilterRegistrationBean addFilter() {
FilterRegistrationBean<Filter> filterRegistrationBean = new FilterRegistrationBean<>();
filterRegistrationBean.setFilter(new LoginFilter(jwtTokenProvider));
filterRegistrationBean.setOrder(1);
filterRegistrationBean.addUrlPatterns("/users/me/*");
return filterRegistrationBean;
}
ํํฐ ๋์ ๋ฐฉ์
Spring ์ธํฐ์ ํฐ
์ธํฐ์ ํฐ๋ Spring์ด ์ ๊ณตํ๋ ๊ธฐ์ ๋ก, ๋์คํจ์ฒ ์๋ธ๋ฆฟ์ด ์ปจํธ๋กค๋ฌ๋ฅผ ํธ์ถํ๊ธฐ ์ /ํ ์์ฒญ์ ๋ํด ๋ถ๊ฐ์ ์ธ ์์ ์ ์ฒ๋ฆฌํ๋ ๊ฐ์ฒด๋ค.
preHandler() : handler์ ์ ์คํ
postHandler() : handlerํ์ ์คํ
afterCompletion() : ์์ธ์ฒ๋ฆฌ, ๋ฆฌ์์ค ์ ๋ฆฌ
์คํ๋ง ์ธํฐ์ ํฐ ๋ฑ๋ก ๋ฐฉ๋ฒ
@Configuration
public class WebConfig implements WebMvcConfigurer {
private final LoginInterceptor loginInterceptor;
public WebConfig(LoginInterceptor loginInterceptor) {
this.loginInterceptor = loginInterceptor;
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(loginInterceptor)
.addPathPatters("/**")
.excludePathPatters("/signup", "/login");
}
}
ํํฐ | ์ธํฐ์ ํฐ |
- ์๋ฐ ํ์ค ์คํ | - ์คํ๋ง์ด ์ ๊ณตํ๋ ๊ธฐ์ |
- ๋ค์ ํํฐ๋ฅผ ์คํํ๊ธฐ ์ํด ๊ฐ๋ฐ์๊ฐ ๋ช ์์ ์ผ๋ก ์์ฑํด์ค์ผํ๋ค | - ๋ค์ ์ธํฐ์ ํฐ๋ฅผ ์คํํ๊ธฐ ์ํด ๊ฐ๋ฐ์๊ฐ ์ ๊ฒฝ์จ์ผ ํ๋ ๋ถ๋ถ์ด ์๋ค. |
- ServletRequest, ServletResponse๋ฅผ ํํฐ ์ฒด์ด๋ ์ค๊ฐ์ ์๋ก์ด ๊ฐ์ฒด๋ก ๋ฐ๊ฟ ์ ์๋ค. (chain.doFilter๋ฅผ ํ๋ ๊ณผ์ ์์) | - ServletReqeust, ServletResponse๋ฅผ ์ธํฐ์ ํฐ ์ฒด์ด๋ ์ค๊ฐ์ ์๋ก์ด ๊ฐ์ฒด๋ก ๋ฐ๊ฟ ์ ์๋ค. |
- ํํฐ์์ ์์ธ๊ฐ ๋ฐ์ํ๋ฉด @ControllerAdvice์์ ์ฒ๋ฆฌํ์ง ๋ชปํ๋ค. | - ์ธํฐ์ ํฐ์์ ์์ธ๊ฐ ๋ฐ์ํ๋ฉด @ControllerAdvice์์ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ค. |
'Server๐งค > Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spring] Transaction ์ ๋๋ก ์ดํดํ๊ธฐ (0) | 2023.07.19 |
---|