gpt4 book ai didi

redirect - Shiro 不会重定向到具有无效登录名的未授权Url - Shiro with Spring 和 Tiles

转载 作者:行者123 更新时间:2023-12-04 05:49:06 27 4
gpt4 key购买 nike

我正在使用 Spring MVC、Tiles 和 Shiro。

这是我的未授权Url 属性的配置方式:<property name="unauthorizedUrl" value="/unauthorized"/>
我的期望是,当 MyAuthorizingRealm发现无效凭据,Shiro 将重定向到 /unauthorized .

但是,这不会发生在我提交表单时。我有登录 @Controller映射到处理 /login 的 GET 和 POST 操作.用于访问 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";
}
}

就算我扔 AuthenticationException来自 MyAuthorizingRealm.doGetAuthenticationInfo()我仍然无法让 Shiro 重定向到 /unauthorized .它总是以过滤器链结束并执行 @Controller 中的 POST 方法。 ;当然,我希望改为重定向。

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

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

以下是 Shiro 的一些 TRACE 日志输出。当您尝试访问 /lists 时 Shiro 起作用.但是,当提交登录表单时,重定向到 /unauthorized永远不会发生。注意,检测到登录提交:
http://pastebin.com/ZEK3CTdJ

因此,检测到登录提交但仍然执行原始过滤器链而不是重定向到 /unauthorized
我难住了。非常感谢您的帮助,如果您需要更多信息,请告诉我。

最佳答案

我想我看到了两个问题:

1) 你的 spring xml 的 pastebin 没有显示 SecurityManager
正在配置您的领域。 IE。它需要看起来像这样:

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

2) 您正在设置一个 Spring MVC Controller 来执行身份验证,这意味着您希望控制何时 subject.login被调用而不依赖于 Shiro 的内置 FormAuthenticationFilter ( authc )。

如果您这样做,您将需要重新定义 authc过滤为
PassThruAuthenticationFilter .

这允许请求“通过”过滤器链到您的
您负责调用的登录 View / Controller
主题登录

您可以通过设置 filters 在 spring.xml 中执行此操作属性(property)和使用 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

关于redirect - Shiro 不会重定向到具有无效登录名的未授权Url - Shiro with Spring 和 Tiles,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10303464/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com