spring-security Spring安全验证入口点

kuarbcqp  于 2022-11-11  发布在  Spring
关注(0)|答案(1)|浏览(277)

我已经在我的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请求的登录页面。如何实现这一点?

smdnsysy

smdnsysy1#

我已经通过在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");                    
    }

相关问题