Spring安全认证入口点

时间:2013-06-24 05:59:43

标签: spring-security

我在我的Spring MVC应用程序上启用了Rest支持,并在我的security-context.xml上设置了AuthenticationEntryPoint

<http auto-config="false" use-expressions="true"
            disable-url-rewriting="true" entry-point-ref="restAuthenticationEntryPoint">

RestAuthenticationEntryPoint.java

@Component
public final class RestAuthenticationEntryPoint implements AuthenticationEntryPoint {

    @Override
    public void commence(final HttpServletRequest request, final HttpServletResponse response, final AuthenticationException authException) throws IOException {
        response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "Unauthorized");
    }

}

每当任何用户尝试访问资源而不进行身份验证时,都会出现以下错误:

HTTP Status 401 - Unauthorized

以上行为仅适用于Rest服务。但是,如果用户尚未通过身份验证,我希望具有将用户重定向到登录页面以进行正常Web请求的默认行为。怎么做到这一点?

2 个答案:

答案 0 :(得分:3)

我想你正在寻找如何整合多个入口点 此链接可以帮助您:
Can Spring Security support multiple entry points?

答案 1 :(得分:0)

我通过在 API 请求中发送 HTTP 标头并根据来自 AuthenticationEntryPoint 的开始方法的标头发送响应来实现这一点

您可以通过在开始方法中添加以下代码来实现:

if(request.getHeader("request-source") != null && request.getHeader("request-source").equals("API")) {
        response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "Unauthorized");
    }else {
        response.sendRedirect("/login");                    
    }