当auth失败时Apache Shiro的预期响应?

时间:2014-08-11 09:50:24

标签: authentication shiro bearer-token

我已经实现了承载令牌身份验证(每个请求中的身份验证,标头中包含client-id和access-token)。

当我使用错误的凭据(Access-Token)时,我回到了一个空的“200 OK”,这是预期的吗?不应该是401或404吗?当我使用正确的凭证时,我会收到“200 OK”预期的Json响应,包含正文内容。

我正在使用DefaultPasswordService和AuthorizingRealm。也许我错过了什么?

使用Shiro 1.2.3

1 个答案:

答案 0 :(得分:0)

我想我解决了这个问题。

在我的onAccessDenied()看起来像这样之前:

@Override 
protected boolean onAccessDenied(ServletRequest request, ServletResponse response) 
        throws Exception {       
    if (hasAuthorizationToken(request)) { 
        // Proceed with authentication 
        return executeLogin(request, response);           
    } 
    // Return 401 if authentication failed 
          WebUtils.toHttp(response).sendError( 
                Status.UNAUTHORIZED.getStatusCode(), 
                "Oops, Authentication required"); 
    return false; 
} 

现在看起来像这样:

@Override  
protected boolean onAccessDenied(ServletRequest request, ServletResponse response) 
            throws Exception { 
        boolean authenticated = false; 
        if (hasAuthorizationToken(request)) { 
            // Proceed with authentication 
            authenticated = executeLogin(request, response);           
        } 
        // Return 401 if authentication failed 
        if (!authenticated) 
            WebUtils.toHttp(response).sendError( 
                    Status.UNAUTHORIZED.getStatusCode(), 
                    "Oops, Authentication required"); 
        return authenticated;  
}

我需要在身份验证失败时手动返回Status.UNAUTHORIZED。