此Web应用程序适用于Shiro和JSF。我添加了PrimeFaces并且我有登录重定向问题。
预期行为:
使用primfaces的行为
我通过在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
答案 0 :(得分:1)
此问题的根本原因是我的所有视图都在同一目录中。我已经配置了shiro来要求对根目录/*
显示登录页面的原因是因为它是一个“特殊”的情况,它被定义为shiro配置中的登录页面。加载此页面后,浏览器对css和js文件提出了额外请求,这就是此页面上没有主题的原因。
鉴于WebUtils.redirectToSavedRequest(request, response, "index.xhtml");
的行为,似乎shiro只保存收到的不是登录页面的最后一个请求。