Spring Security:在401的情况下重定向到登录页面

时间:2015-09-04 09:30:39

标签: spring rest spring-security

我有一个暴露REST API的应用程序,并使用Spring Security进行保护。如果发送到我的服务器的请求导致401 - 未经授权,是否有办法自动将客户端(从服务器端)重定向到登录页面?

3 个答案:

答案 0 :(得分:3)

基于spring-security的{​​{1}}申请。

定义处理程序bean:

spring-boot

在安全配置类中(例如@Component public class CommenceEntryPoint implements AuthenticationEntryPoint, Serializable { private static final long serialVersionUID = 565662170056829238L; // invoked when user tries to access a secured REST resource without supplying any credentials, @Override public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException authException) throws IOException { // send a json object, with http code 401, // response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "Unauthorized"); // redirect to login page, for non-ajax request, response.sendRedirect("/login.html"); } } ):

自动装配bean:

WebSecurityConfig

指定处理程序:

@Autowired
private CommenceEntryPoint unauthorizedHandler; // handle unauthorized request,

提示:

  • 这仅适用于非ajax请求,
  • 对于ajax请求,最好返回.exceptionHandling().authenticationEntryPoint(unauthorizedHandler).and() // excepion handler, 代码,让前端处理它。
    如果您想使用401回复,请401使用CommenceEntryPoint.commence()代替response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "Unauthorized");

答案 1 :(得分:1)

您可以通过在web.xml的error-page元素中指定异常或HTTP状态代码来指定应用程序处理异常或HTTP状态代码的方式

例如:web.xml

<error-page>
    <error-code>401</error-code>
    <location>/login.html</location>
</error-page>

与处理页面未找到页面的其他HTTP状态代码viz 404相同。

答案 2 :(得分:0)

我通过在http节点下向Spring Security XML添加以下元素来解决这个问题:

<security:access-denied-handler error-page="/#/login"  />
<security:session-management invalid-session-url="/#/login" session-fixation-protection="changeSessionId" />