四郎不重定向到unauthorizedUrl W /无效登录 - 四郎与Spring和瓷砖(Shir

2019-07-29 03:21发布

我使用Spring MVC中,瓷砖和四郎。

这是我的unauthorizedUrl属性是如何配置的: <property name="unauthorizedUrl" value="/unauthorized"/>

我的期望是,当MyAuthorizingRealm认定无效的凭证,即四郎会重定向到/unauthorized

但是,这不会发生,我将提交表单。 我有一个登录@Controller映射到处理GET和POST操作为/login 。 对于访问的URL /lists显示登录表单。 因此,似乎在一种情况下而不是其他的工作。

@Controller
@RequestMapping(value = "/login")
public class LoginController {

    @RequestMapping(method = RequestMethod.GET)
    public String getLoginFormView(Model model) {
        return "login";
    }

    // if this method doesn't exist a Post not supported exception is thrown
    @RequestMapping(method = RequestMethod.POST)
    public String handlePost() {
        return "this view doesn't exist";
    }
}

即使我扔AuthenticationExceptionMyAuthorizingRealm.doGetAuthenticationInfo()我仍然不能得到四郎重定向到/unauthorized 。 它总是结束了与过滤器链和继续执行在POST方法@Controller ; 当然我希望重定向来代替。

这里是我webapp-context.xml : http://pastebin.com/XZaCKqEC

这里是我web.xml : http://pastebin.com/5H81Tm8A

下面是一些四郎跟踪日志输出。 当您尝试访问工作四郎/lists 。 但是,当登录表单提交重定向到/unauthorized从未发生过。 注意,当检测登录提交: http://pastebin.com/ZEK3CTdJ

所以,当检测登录提交,但原来的过滤器链执行反正而不是重定向到/unauthorized

我难倒。 非常感谢您的帮助,如果您需要更多信息,请让我知道。

Answer 1:

我想我看到了两个问题:

1)您为您的Spring XML不显示安全管理器引擎收录配置与境界。 也就是说,它必须是这样的:

<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
    <property name="realm" ref="myRealm"/>
</bean>

2)你建立一个Spring MVC的控制器来进行认证,要在控制这意味着subject.login被调用,不依赖于四郎的内置FormAuthenticationFilter( authc )。

如果你这样做,你就需要重新定义authc过滤器是一个PassThruAuthenticationFilter 。

这允许请求“通过”过滤器链到你的登录查看/控制器,你是负责调用subject.login

你可以在你的spring.xml通过设置filters性能和使用authc的名称为您配置的过滤器:

<bean id="passthruAuthcFilter" class="org.apache.shiro.web.filter.authc.PassThruAuthenticationFilter">
    <property name="loginUrl" value="/login"/>
</bean>

<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
    ...
   <property name="filters">
       <util:map>
           <entry key="authc" value-ref="passthruAuthcFilter"/>
       </util:map>
   </property>
   ...
</bean>

此外,作为小费,你可能需要使用Shiro的WebUtils重定向终端用户到他们最初企图被重定向到登录前的URL。 四郎的FormAuthenticationFilter自动执行此操作,但是当你执行登入自己,你负责做的,如果希望这个重定向。

例如,在你LoginController的handlePost方法:

subject.login(authcToken);
WebUtils.redirectToSavedRequest(request, response, yourFallbackUrlIfThereIsntASavedRequest);
return null; //tells Spring MVC you've handled the response, and not to render a view


文章来源: Shiro doesn't redirect to unauthorizedUrl w/invalid login - Shiro with Spring and Tiles