PassThruAuthenticationFilter的Web-Shiro getSuccessUrl

时间:2018-08-07 08:27:45

标签: authentication shiro

一段时间以来,我一直使用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没有意义,所以我想知道,获取过滤器对象的正确方法是什么?

1 个答案:

答案 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不要渲染视图,我们正在重定向   明确