将 PrimeFaces 与 JSF 一起使用时 Shiro 重定向到错误的位置
Posted
技术标签:
【中文标题】将 PrimeFaces 与 JSF 一起使用时 Shiro 重定向到错误的位置【英文标题】:Shiro redirecting to wrong place when using PrimeFaces with JSF 【发布时间】:2012-12-10 10:20:34 【问题描述】:此 Web 应用程序可与 Shiro 和 JSF 一起使用。我添加了 PrimeFaces,但我遇到了登录重定向问题。
预期行为:
-
导航到需要认证的网址
重定向到登录页面
登录重定向回原来的页面
primfaces的行为
-
导航到需要认证的网址
重定向到登录页面
登录后重定向到 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
我将其修改为使用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】:这个问题的根本原因是我的所有视图都在同一个目录中。我已将 shiro 配置为要求对根目录 /*
中的所有内容进行身份验证
显示登录页面的原因是因为它是一个“特殊”情况,它被定义为 shiro 配置中的登录页面。加载此页面后,浏览器对 css 和 js 文件进行了额外请求,这就是此页面上没有主题的原因。
鉴于WebUtils.redirectToSavedRequest(request, response, "index.xhtml");
的行为,shiro 似乎只是保存了收到的最后一个不是登录页面的请求。
【讨论】:
我认为这是我向shiro社区shiro-user.582556.n2.nabble.com/…987654321@ shiro 社区没有回应,创建了一个错误issues.apache.org/jira/browse/SHIRO-406以上是关于将 PrimeFaces 与 JSF 一起使用时 Shiro 重定向到错误的位置的主要内容,如果未能解决你的问题,请参考以下文章
关于 JSF 2.0 自定义组件和 Primefaces 的帮助
JSF / PrimeFaces - 如何显示自定义验证器的消息,但不显示同一组件上的必需验证
Primefaces FileUpload 与 PrettyFaces 和 JSF 2.2.3