5 Commits

Author SHA1 Message Date
abel
541320065c AuthenticationEntryPoint, AccessDeniedHandler 추가 후 발생하는 exception의 다국어 처리가 되지 않는 점 수정 2020-12-10 23:14:20 +09:00
abel
bc5e033ee7 add badge 2020-09-03 16:23:05 +09:00
codej99
d51ed655cc add badge 2020-09-02 23:17:43 +09:00
abel
a6a65b7250 log level 수정 2020-06-26 16:38:20 +09:00
abel
9ee074ab57 README.md 업데이트 2020-06-24 01:40:41 +09:00
6 changed files with 61 additions and 6 deletions

View File

@@ -1,3 +1,8 @@
![Java_8](https://img.shields.io/badge/java-v1.8-red?logo=java)
![Java_11](https://img.shields.io/badge/java-v11-red?logo=java)
![Spring_Boot](https://img.shields.io/badge/Spring_Boot-v2.1.4-green.svg?logo=spring)
![Spring_Security](https://img.shields.io/badge/Spring_Security-v5.1.5-green.svg?logo=spring)
![GitHub stars](https://img.shields.io/github/stars/codej99/SpringRestApi?style=social)
# Spring Rest Api 만들기 프로젝트
### 0. 개요
@@ -120,3 +125,8 @@ alter table user_roles
- https://daddyprogrammer.org/post/3870/spring-rest-api-redis-caching/
- Git
- https://github.com/codej99/SpringRestApi/tree/cache-data-redis
- SpringBoot2로 Rest api 만들기(16) AOP와 Custom Annotation을 이용한 금칙어(Forbidden Word) 처리
- Document
- https://daddyprogrammer.org/post/11356/springboot2-forbidden-word-by-aop-annotation/
- Git
- https://github.com/codej99/SpringRestApi/tree/feature/block_fobidden_word

View File

@@ -1,10 +1,13 @@
package com.rest.api.config.security;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.security.access.AccessDeniedException;
import org.springframework.security.web.access.AccessDeniedHandler;
import org.springframework.stereotype.Component;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@@ -14,7 +17,9 @@ import java.io.IOException;
public class CustomAccessDeniedHandler implements AccessDeniedHandler {
@Override
public void handle(HttpServletRequest request, HttpServletResponse response, AccessDeniedException exception) throws IOException {
response.sendRedirect("/exception/accessdenied");
public void handle(HttpServletRequest request, HttpServletResponse response, AccessDeniedException exception) throws IOException, ServletException {
response.setLocale(LocaleContextHolder.getLocale());
RequestDispatcher rd = request.getRequestDispatcher("/exception/accessdenied");
rd.forward(request, response);
}
}

View File

@@ -1,10 +1,13 @@
package com.rest.api.config.security;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.security.core.AuthenticationException;
import org.springframework.security.web.AuthenticationEntryPoint;
import org.springframework.stereotype.Component;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@@ -13,7 +16,9 @@ import java.io.IOException;
@Component
public class CustomAuthenticationEntryPoint implements AuthenticationEntryPoint {
@Override
public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException ex) throws IOException {
response.sendRedirect("/exception/entrypoint");
public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException ex) throws IOException, ServletException {
response.setLocale(LocaleContextHolder.getLocale());
RequestDispatcher rd = request.getRequestDispatcher("/exception/entrypoint");
rd.forward(request, response);
}
}

View File

@@ -3,6 +3,7 @@ package com.rest.api.config.security;
import lombok.RequiredArgsConstructor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.http.HttpMethod;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
@@ -10,6 +11,12 @@ import org.springframework.security.config.annotation.web.builders.WebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.config.http.SessionCreationPolicy;
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
import org.springframework.web.servlet.i18n.SessionLocaleResolver;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.util.Locale;
@RequiredArgsConstructor
@Configuration
@@ -39,6 +46,7 @@ public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
.and()
.exceptionHandling().authenticationEntryPoint(new CustomAuthenticationEntryPoint())
.and()
.addFilterBefore(new AthenticationEntryLocaleFilter(), UsernamePasswordAuthenticationFilter.class)
.addFilterBefore(new JwtAuthenticationFilter(jwtTokenProvider), UsernamePasswordAuthenticationFilter.class); // jwt token 필터를 id/password 인증 필터 전에 넣어라.
}
@@ -49,4 +57,31 @@ public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
"/swagger-ui.html", "/webjars/**", "/swagger/**");
}
private static class AthenticationEntryLocaleFilter implements Filter {
private SessionLocaleResolver localeResolver;
private AthenticationEntryLocaleFilter() {
localeResolver = new SessionLocaleResolver();
localeResolver.setDefaultLocale(Locale.KOREAN);
}
@Override
public void init(FilterConfig filterConfig) {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
if(request.getParameter("lang") != null)
localeResolver.setDefaultLocale(Locale.forLanguageTag(request.getParameter("lang")));
Locale locale = localeResolver.resolveLocale((HttpServletRequest) request);
LocaleContextHolder.setLocale(locale);
chain.doFilter(request, response);
}
@Override
public void destroy() {
}
}
}

View File

@@ -18,7 +18,7 @@ public class ExceptionController {
throw new CAuthenticationEntryPointException();
}
@GetMapping(value = "/accessdenied")
@RequestMapping(value = "/accessdenied")
public CommonResult accessdeniedException() {
throw new AccessDeniedException("");
}

View File

@@ -1,6 +1,6 @@
logging:
level:
root: debug
root: info
com.rest.api: debug
spring: