1

此 Web 应用程序可与 Shiro 和 JSF 一起使用。我添加了 PrimeFaces,但我遇到了登录重定向问题。

预期行为:

  1. 导航到需要 authc 的 url
  2. 重定向到登录页面
  3. 登录重定向回原来的页面

primfaces 的行为

  1. 导航到需要 authc 的 url
  2. 重定向到登录页面
  3. 登录后重定向到 javax.faces.resource/theme.css?ln=primefaces-aristo

我通过在我的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

我将其修改为使用 aPassThruAuthenticationFilter并且登录请求由 my 处理,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

4

1 回答 1

1

这个问题的根本原因是我所有的视图都在同一个目录中。我已将 shiro 配置为要求对根目录中的所有内容进行身份验证/*

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

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

于 2012-12-29T19:35:29.213 回答