我有在设定的授权侦听器(实现的PhaseListener)来管理认证和autorization烦恼。
更具体地说,我设置会话范围的bean称为会话Bean:
@ManagedBean
@SessionScoped
public class SessionBean{
private String loggedUser;
public SessionBean(){
logger.info("Sono nel costruttore di SessionBean()");
}
public String login(){
....
}
...
}
而在我的sun-web.xml中:
<managed-bean>
<managed-bean-name>SessionBean</managed-bean-name>
<managed-bean-class>it.uniroma3.acme.auction.bean.SessionBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
在登录()我就用户名/密码控制,如果成功我设置“loggedUser”。
我AuthorizationListener是:
public class AuthorizationListener implements PhaseListener {
private String currentUser;
private SessionBean sessionBean;
public void afterPhase(PhaseEvent event) {
SessionBean sessionBean = (SessionBean)event.getFacesContext().getExternalContext().getSessionMap().get("SessionBean");
String currentUser = sessionBean.getLoggedUser();
if (sessionBean != null) {
...
String currentUser = sessionBean.getLoggedUser();
}
else {
...
}
}
...
}
而在sun-web.xml中:
<!-- Authentication and authorization block starting -->
<lifecycle>
<phase-listener>AuthorizationListener</phase-listener>
</lifecycle>
<navigation-rule>
<from-view-id>/*</from-view-id>
<navigation-case>
<from-outcome>loginPage</from-outcome>
<to-view-id>login.jsf</to-view-id>
</navigation-case>
</navigation-rule>
<!-- Authentication and authorization block ending -->
但是我收到一个空足尖sessionBean.getLoggedUser()。 所以,当AuthorizationListener检查用户仍不能创建会话Bean。 这就是为什么我添加了一个“如果会话Bean不存在,创建它,并把它放在SessionMap”,但仍然没有工作。
我不是被迫使用这种方法进行身份验证和授权,但我需要的是避免“session.setAttribute(”用户名”,用户名)。因此,任何其他的策略将是非常apreciated。谢谢你,安德烈
编辑:作为BalusC建议,我编辑的afterPhase方法。 仍然有总是空SessionBean的烦恼。