KON-703 Keine Authentifizierung - Logout/Portal Page
diff --git a/src/main/java/org/eclipse/openk/contactbasedata/config/auth/JwtAuthenticationEntryPoint.java b/src/main/java/org/eclipse/openk/contactbasedata/config/auth/JwtAuthenticationEntryPoint.java index 85a5eda..63f09a9 100644 --- a/src/main/java/org/eclipse/openk/contactbasedata/config/auth/JwtAuthenticationEntryPoint.java +++ b/src/main/java/org/eclipse/openk/contactbasedata/config/auth/JwtAuthenticationEntryPoint.java
@@ -14,16 +14,20 @@ */ package org.eclipse.openk.contactbasedata.config.auth; +import feign.FeignException; +import org.springframework.security.access.AccessDeniedException; import org.springframework.security.core.AuthenticationException; import org.springframework.security.web.AuthenticationEntryPoint; import org.springframework.stereotype.Component; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.Serializable; -@Component +@ControllerAdvice public class JwtAuthenticationEntryPoint implements AuthenticationEntryPoint, Serializable { @Override @@ -31,4 +35,12 @@ AuthenticationException authException) throws IOException { response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "Unauthorized"); } + + @ExceptionHandler(value = {AccessDeniedException.class}) + public void commence(HttpServletRequest request, HttpServletResponse response, + AccessDeniedException accessDeniedException) throws IOException { + //map to 403 + response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "Authorization Failed : " + accessDeniedException.getMessage()); + } + }
diff --git a/src/main/java/org/eclipse/openk/contactbasedata/config/auth/JwtAuthenticationTokenFilter.java b/src/main/java/org/eclipse/openk/contactbasedata/config/auth/JwtAuthenticationTokenFilter.java index 88ecc25..5138830 100644 --- a/src/main/java/org/eclipse/openk/contactbasedata/config/auth/JwtAuthenticationTokenFilter.java +++ b/src/main/java/org/eclipse/openk/contactbasedata/config/auth/JwtAuthenticationTokenFilter.java
@@ -15,6 +15,7 @@ package org.eclipse.openk.contactbasedata.config.auth; +import org.eclipse.openk.contactbasedata.exceptions.UnauthorizedException; import org.keycloak.RSATokenVerifier; import org.keycloak.representations.AccessToken; import org.springframework.beans.factory.annotation.Value; @@ -50,11 +51,10 @@ @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws ServletException, IOException { String authenticationHeader = useStaticJwt ? staticJwt : request.getHeader(this.tokenHeader); - try { SecurityContext context= SecurityContextHolder.getContext(); - if(authenticationHeader != null) { + if(authenticationHeader != null && !authenticationHeader.isEmpty()) { final String bearerTkn= authenticationHeader.replace("Bearer ", "");
diff --git a/src/main/java/org/eclipse/openk/contactbasedata/config/auth/JwtTokenValidationFilter.java b/src/main/java/org/eclipse/openk/contactbasedata/config/auth/JwtTokenValidationFilter.java index fe57506..719af4c 100644 --- a/src/main/java/org/eclipse/openk/contactbasedata/config/auth/JwtTokenValidationFilter.java +++ b/src/main/java/org/eclipse/openk/contactbasedata/config/auth/JwtTokenValidationFilter.java
@@ -47,7 +47,7 @@ protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException { String authenticationHeader = useStaticJwt ? null : request.getHeader(this.tokenHeader); - if(authenticationHeader != null) { + if(authenticationHeader != null && !authenticationHeader.isEmpty()) { final String bearerTkn= authenticationHeader.replace("Bearer ", ""); Response res = authNAuthApi.isTokenValid(bearerTkn); if( res.status() != HttpStatus.OK.value() ) {
diff --git a/src/main/java/org/eclipse/openk/contactbasedata/exceptions/FeignExceptionHandler.java b/src/main/java/org/eclipse/openk/contactbasedata/exceptions/FeignExceptionHandler.java new file mode 100644 index 0000000..576e8ce --- /dev/null +++ b/src/main/java/org/eclipse/openk/contactbasedata/exceptions/FeignExceptionHandler.java
@@ -0,0 +1,17 @@ +package org.eclipse.openk.contactbasedata.exceptions; + +import feign.FeignException; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestControllerAdvice; + +import javax.servlet.http.HttpServletResponse; + +@RestControllerAdvice +public class FeignExceptionHandler { + + @ExceptionHandler(FeignException.class) + public String handleFeignStatusException(FeignException e, HttpServletResponse response) { + response.setStatus(e.status()); + return "feignError"; + } +}