2014-09-01 4 views
0

jax-rs를 사용하여 bulid rest API입니다. 인증을 처리하기 위해 Interceptor를 사용하고 있습니다. 인증이 실패하면 내가 좋아하는 WebApplicationException를 반환 :jaxrs - 인터셉터 반환 상태에서 오류가 발생합니다.

try 
     { 
     Authentication authentication = authenticationManager 
       .authenticate(new UsernamePasswordAuthenticationToken(policy.getUserName(), policy.getPassword())); 
     SecurityContext securityContext = SecurityContextHolder.getContext(); 
     securityContext.setAuthentication(authentication); 
     } 
     catch (AuthenticationServiceException | BadCredentialsException e) 
     { 
     throw new WebApplicationException(Response.Status.UNAUTHORIZED); //TODO set response status 
     } 

하지만 startus 반환 (500) 대신

나는 그것이 내가 설정 상태를 반환 서비스에 WebApplicationExceptions을 던져하지만 요격에 근무하지 않았다 401. 인터셉터에서 401을 반환하는 방법은 무엇입니까?

jaxrs : 서버 설정 :

<jaxrs:server id="restService" address="/rest"> 
    <jaxrs:serviceBeans> 
     <ref bean="serviceBean"/> 
    </jaxrs:serviceBeans> 
    <jaxrs:inInterceptors> 
     <ref bean="securityInterceptor"/> 
    </jaxrs:inInterceptors> 
</jaxrs:server> 

<bean id="serviceBean" class="some_package.CustomerService"/> 

<bean id="securityInterceptor" class="some_package.AuthenticatorInterceptor"/> 
+0

확실하지는 않지만 인증을 위해서는 인터셉터 대신 필터를 사용해야합니다. – mkrakhin

+0

@mkrakhin 필자는 필터를 시도했지만 버전 1.1.1에서 jsr311-api가 작동하지 않아 최신 버전으로 업그레이드 할 수 없습니다. –

답변

0

귀하의 인터셉터는 JAX-RS 자원 전에 호출은 아직 JAX-RS 설정에 대해 알고하지 않는 것을 의미라고합니다.

어디에서 던져 지든 상관없이 적절한 응답으로 변환하려면 ExceptionMapper을 사용합니다.

+0

@Provider 주석을 사용하여 매퍼를 만들고 xml에 구성을 추가하고 공급자 목록에 jaxrs : server를 추가하지만 예외가 발생하면 실행되지 않습니다. –

1
import javax.ws.rs.container.ContainerRequestContext; 
import javax.ws.rs.container.ContainerRequestFilter; 
import javax.ws.rs.core.Response; 
import javax.ws.rs.core.Response.Status; 
import javax.ws.rs.ext.Provider; 

@Provider 
public class Example implements ContainerRequestFilter { 
    @Override 
    public void filter(ContainerRequestContext requestContext) { 
     requestContext.abortWith(Response.status(Status.UNAUTHORIZED).build()); 
    } 
} 
관련 문제