抛出BadCredentialsException而不是重定向回登录页面

时间:2017-04-11 19:35:03

标签: spring spring-security

所以我有一个Spring控制器,使用Spring Security被一个简单的封锁了它工作正常。

现在我要求 - 有些人不需要登录,除非他们是在我的祖母饼干配方之后。所以在我的控制器代码中,我检查它们后面的配方是什么,如果是饼干,我会抛出BadCredentialsException();

现在我不想拆分控制器方法。这些食谱将在数据库中,一些(饼干)将供所有人使用,其他人则需要特定的角色。 (例如肉类)

然而,看起来这个异常被捡起来购买一般的Exception拦截器并被重新定向到"出了问题"页。

我希望他们转到登录页面,登录,然后重定向回配方页面。

<bean id="failureRedirectHandler" class="org.springframework.security.web.authentication.SimpleUrlAuthenticationFailureHandler">
    <property name="useForward" value="true"/>
</bean>

同样,这一切都适用于intercept-url access =&#34; IS_AUTHENTICATED_FULLY&#34;但是,如果我明确抛出BadCredentialsException,为什么它不会工作呢?

1 个答案:

答案 0 :(得分:2)

我认为您要抛出的异常是AccessDeniedException。使用标准配置,如果当前未登录,则会将用户重定向到登录页面。如果登录,则拒绝访问&#34;页面将会显示。您可以自定义此拒绝访问权限的页面,例如,包含以不同用户身份登录的链接。

BadCredentialsException可能不是在控制器中抛出,而是仅在安全过滤器内部,当用户实际上已经输入某些错误的凭据时。