我已经测试了Glassfish 3.0.1中默认的安全容器,并得出结论,我不想再花时间在那上面了。相反,我想要自己控制验证。但是,我需要一些指导来帮助我正确地操作。
目前,我有一个UserBean,其中包含登录/注销功能(请参见下文)。我不想使用内置的*j_security_check*容器,而是使用核心JSF 2.0。
我的问题如下:
- 如果用户未登录(访问某些文件夹),我需要一个ServletFilter来重定向流量吗?
- 用户成功登录后,如何存储用户Pricipals?
感谢任何帮助或示例链接,问候Chris。
PS:抱歉将两个问题合并在一起
@ManagedBean
@SessionScoped
public class UserBean {
private AuthenticateUser authenticateUser;
...
public String login() {
FacesContext context = FacesContext.getCurrentInstance();
HttpServletRequest request = (HttpServletRequest) context.getExternalContext().getRequest();
JsfUtil.log("Username : " +authenticateUser.getUserName());
JsfUtil.log("Password : " +authenticateUser.getPassword());
AuthenticateUser authRequest = authenticationFacade.find(authenticateUser);
try {
if(!authRequest.equals(authenticateUser))
return "/loginError";
request.login(authenticateUser.getUserName(), authenticateUser.getPassword());
return "";
} catch(ServletException e){
JsfUtil.addErrorMessage(e, "Incorrect username or password, please try again.");
return "/loginError";
}
...
public String logOut() {
String result = "/index?faces-redirect=true";
FacesContext context = FacesContext.getCurrentInstance();
HttpServletRequest request = (HttpServletRequest) context.getExternalContext().getRequest();
try {
request.logout();
} catch (ServletException e) {
JsfUtil.log("Failed to logout user!" +e.getRootCause().toString());
result = "/loginError?faces-redirect=true";
}
return result;
}