【发布时间】:2017-11-07 19:13:39
【问题描述】:
我在 Payara 4.1.1.x 上使用 Apache Shiro 1.4.0 和 Java EE 7。我的 shiro.ini 看起来像:
[urls]
page1.xhtml = user
must_be_logged.xhtml = authc
标准的 RememberMe 功能在 page1.xhtml 上完美运行
关于登录,我使用的是编程登录from BalusC's article。由于它是一个 CDI bean,我可以注入一些 EJB 并执行一些操作:
@Named
@RequestScoped
public class Login{
// username, password, rememberMe attribute definition with getter and setter
@EJB
private SomeService someServiceImpl;
public void submit(){
try {
SecurityUtils.getSubject().login(new UsernamePasswordToken(username, password, remember));
Session session = SecurityUtils.getSubject().getSession(false);
if(session != null){
someServiceImpl.addUserInfoToSession(username, session);
}
// redirect to page
}
catch(AuthenticationException e) {
// send error message
}
}
}
addSomeUserInfoToSession 基本上从数据库中检索用户实体,并通过session.setAttribute("first_name", ...); 将一些信息(名字、姓氏、语言首选项等)添加到会话属性中。
我找不到如何为记住的用户执行此类操作:从 rememberMe cookie 中识别主题时,如何执行涉及 EJB 的操作?
- 我找不到触发 rememberMe 机制的过滤器
- 我尝试使用会话侦听器(实现
org.apache.shiro.session.SessionListener),但找不到如何注入 CDI bean 或如何在此类“POJO”中使用 EJB - 如果我使用自定义的 RememberMeManager(如扩展
org.apache.shiro.mgt.AbstractRememberMeManager),我找不到如何在其中注入 @EJB。
【问题讨论】:
标签: jakarta-ee shiro remember-me