使用PrimeFaces和JSF时,Shiro重定向到错误的位置

时间:2012-12-23 19:01:29

标签: authentication redirect jsf-2 shiro

此Web应用程序适用于Shiro和JSF。我添加了PrimeFaces并且我有登录重定向问题。

预期行为:

  1. 导航到需要authc的网址
  2. 重定向到登录页面
  3. 登录重定向回原始页面
  4. 使用primfaces的行为

    1. 导航到需要authc的网址
    2. 重定向到登录页面
    3. 登录后重定向到javax.faces.resource / theme.css?ln = primefaces-aristo
    4. 我通过在shiro.ini文件

      中捕获请求参数来登录用户
      # name of request parameter with username; if not present filter assumes 'username'
      authc.usernameParam = login:username
      # name of request parameter with password; if not present filter assumes 'password'
      authc.passwordParam = login:password
      # does the user wish to be remembered?; if not present filter assumes 'rememberMe'
      authc.rememberMeParam = login:remembered
      

      我将其修改为使用PassThruAuthenticationFilter而登录请求由我的Bean处理,但这仍然会产生相同的错误。 Bean登录方法

      AuthenticationToken token =  new UsernamePasswordToken(username, password);
      Subject currentUser = SecurityUtils.getSubject();
      currentUser.login(token);
      ServletRequest request = (ServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
      ServletResponse response = (ServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
      WebUtils.redirectToSavedRequest(request, response, "index.xhtml");
      

      我的登录Bean是@RequestScoped

1 个答案:

答案 0 :(得分:1)

此问题的根本原因是我的所有视图都在同一目录中。我已经配置了shiro来要求对根目录/*

中的所有内容进行身份验证

显示登录页面的原因是因为它是一个“特殊”的情况,它被定义为shiro配置中的登录页面。加载此页面后,浏览器对css和js文件提出了额外请求,这就是此页面上没有主题的原因。

鉴于WebUtils.redirectToSavedRequest(request, response, "index.xhtml");的行为,似乎shiro只保存收到的不是登录页面的最后一个请求。