一段时间以来,我一直使用Shiro的内置登录行为。当用户尝试访问受保护的资源时,用户将被重定向到登录页面,然后在成功登录后,他们将被重定向回他们试图访问的资源。即PassThruAuthenticationFilter的successUrl属性。
现在我正在使用自己的自定义登录名,我似乎找不到找到正确解决此成功问题的方法。下面是shiro.ini配置:
shiro.ini
[main]
authc = org.apache.shiro.web.filter.authc.PassThruAuthenticationFilter
authc.loginUrl = /login.xhtml
authc.successUrl = /index.xhtml #index.xhtml is fallback url
下面是我的登录代码
Factory<SecurityManager> factory = new IniSecurityManagerFactory(configFileDir + "shiro.ini");
SecurityManager securityManager = factory.getInstance();
SecurityUtils.setSecurityManager(securityManager);
Subject currentUser = SecurityUtils.getSubject();
session = currentUser.getSession();
PassThruAuthenticationFilter filter = new PassThruAuthenticationFilter();
String url = filter.getSuccessUrl();
if (!currentUser.isAuthenticated()) {
UsernamePasswordToken token = new UsernamePasswordToken(username,password);
//
//
//
}
我知道在新启动的PassThruAuthenticationFilter类上使用getSuccessUrl没有意义,所以我想知道,获取过滤器对象的正确方法是什么?
答案 0 :(得分:1)
我终于找到了解决方案;我在登录代码中添加了以下几行:
import org.apache.shiro.web.util.WebUtils;
//...
String successUrl = WebUtils.getSavedRequest(request);
它就像一种魅力。我不必再担心PassThruAuthenticationFilter。
已更新
我从这个link
找到了它在Spring MVC控制器中使用以下内容:
导入org.apache.shiro.web.util.WebUtils; ...字符串fallbackUrl = “ / path / to / go / to / incase / there / is / no / saved / request”; WebUtils.redirectToSavedRequest(请求,响应,fallbackUrl); 返回null; //告诉Spring MVC不要渲染视图,我们正在重定向 明确