[SPRING] 403 대신 Spring Boot 2를 사용하십시오.
SPRING403 대신 Spring Boot 2를 사용하십시오.
Spring Boot 1.5.6.RELEASE 다음과 같이하여 인증없이 uri를 요청하는 경우 스프링 보안 응답을 무단으로 만드는 방법 (http 401 코드)에서 설명한 것처럼 403 대신 HTTP 상태 코드 401을 보낼 수있었습니다.
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
//...
http.exceptionHandling()
.authenticationEntryPoint(new Http401AuthenticationEntryPoint("myHeader"));
//...
}
}
org.springframework.boot.autoconfigure.security.Http401AuthenticationEntryPoint 클래스를 사용한다.
방금 Spring Boot 2.0.0.RELEASE로 업그레이드했는데 더 이상 그런 패키지가 없다는 것을 발견했습니다.
큐: 이 클래스 (Http401AuthenticationEntryPoint)가 아직 Spring Boot에 존재합니까? 없다면 403 대신이 상태 코드 (401)에 의존하는 다른 구현과의 일관성을 유지하기 위해 기존 프로젝트에서 동일한 동작을 유지하는 좋은 대안이 될 수 있습니까?
해결법
-
==============================
1.org.springframework.boot.autoconfigure.security.Http401AuthenticationEntryPoint 클래스가 org.springframework.security.web.authentication.HttpStatusEntryPoint를 위해 제거되었습니다.
org.springframework.boot.autoconfigure.security.Http401AuthenticationEntryPoint 클래스가 org.springframework.security.web.authentication.HttpStatusEntryPoint를 위해 제거되었습니다.
내 경우에는 코드가 이렇게됩니다 :
public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { //... http.exceptionHandling() .authenticationEntryPoint(new HttpStatusEntryPoint(HttpStatus.UNAUTHORIZED)); //... } }
-
==============================
2.Http401AuthenticationEntryPoint가 제거되었습니다 (10715 참조).
Http401AuthenticationEntryPoint가 제거되었습니다 (10715 참조).
요구 사항에 따라 다음을 사용할 수 있습니다.
-
==============================
3.그냥 @ lealceldeiro의 대답을 정교하게 :
그냥 @ lealceldeiro의 대답을 정교하게 :
Spring Boot 2 이전에 나의 보안 설정 클래스는 다음과 같이 보였다.
@Configuration public class MyConfig extends WebSecurityConfigurerAdapter { @Bean public Http401AuthenticationEntryPoint securityException401EntryPoint() { return new Http401AuthenticationEntryPoint("Bearer realm=\"webrealm\""); } @Autowired private Http401AuthenticationEntryPoint authEntrypoint; @Override protected void configure(HttpSecurity http) throws Exception { // some http configuration ... // Spring Boot 1.5.x style http.exceptionHandling().authenticationEntryPoint(authEntrypoint); } //... }
이제 스프링 부트 2에서는 다음과 같이 보입니다.
@Configuration public class MyConfig extends WebSecurityConfigurerAdapter { //Bean configuration for Http401AuthenticationEntryPoint can be removed //Autowiring also removed @Override protected void configure(HttpSecurity http) throws Exception { // some http configuration ... // Spring Boot 2 style http.exceptionHandling().authenticationEntryPoint(new HttpStatusEntryPoint(HttpStatus.UNAUTHORIZED)); } //... }
여기에 또한보십시오 : https://github.com/spring-projects/spring-boot/issues/10715#issuecomment-363592444
-
==============================
4.AuthenticationEntryPoint 클래스를 재정의하여 논리를 사용자 정의 할 수 있습니다. 이게 효과가 있어야합니다 :
AuthenticationEntryPoint 클래스를 재정의하여 논리를 사용자 정의 할 수 있습니다. 이게 효과가 있어야합니다 :
@Component public class AuthEntryPointException implements AuthenticationEntryPoint, Serializable { private static final long serialVersionUID = -8970718410437077606L; @Override public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException authException) throws IOException { response.setStatus(HttpStatus.SC_UNAUTHORIZED); response.setContentType("application/json"); response.getWriter().write("{\"result\":\"UNAUTHORIZED\",\"message\":\"UNAUTHORIZED or Invalid Token\"}"); } }
from https://stackoverflow.com/questions/49241384/401-instead-of-403-with-spring-boot-2 by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 비 관리 스레드 Spring Quartz Websphere Hibernate (0) | 2019.01.05 |
---|---|
[SPRING] Spring 데이터 jpa에서 save와 saveAndFlush의 차이점 (0) | 2019.01.05 |
[SPRING] MongoDB $ aggregate $ Java Spring 데이터에서 여러 필드 푸시 (0) | 2019.01.05 |
[SPRING] 자바 구성으로 Spring ConversionService를 구성하는 방법은 무엇입니까? (0) | 2019.01.05 |
[SPRING] 스프링 부트 응용 프로그램없이 스프링 부트 액츄에이터 사용 (0) | 2019.01.05 |