通过Servlet 3.0以编程方式控制登录
|
我已经在Glassfish 3.0.1中测试了默认的安全容器,得出的结论是,我不会再花时间在上面。相反,我想自己控制验证。但是我需要一些指导以使我步入正轨。
目前,我有一个具有登录/注销功能的UserBean(请参见下文)。而且我不想使用内置在容器中的* j_security_check *,而是使用核心JSF 2.0。
我的问题是;
如果用户未登录(如果访问某些文件夹),是否需要ServletFilter来重定向流量?
用户成功登录后,如何存储用户密码?
感谢任何帮助或链接到示例,问候克里斯。
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;
}
没有找到相关结果
已邀请:
2 个回复
联课
时,您实际上应该已经在代表用户数据库的容器中配置了一个Realm。但是您似乎已用2英镑代替了Realm。在这种情况下,
对您没有用。 您只需要将用户放入会话范围并在该范围内进行拦截即可。这是一个启动示例:
当这样进行身份验证时,您肯定需要一个过滤器来限制访问。使用容器管理的安全性时,通常将其指定为“ 6”中的“ 5”。但是没有它,您必须将其掌握在手中。很高兴知道,JSF托管Bean在任何范围内都由其托管Bean名称来键入。
将上面的过滤器映射到所需的URL模式。 当您仍然想重新考虑使用容器管理的身份验证时,以下相关答案可能会有用: Java EE登录页面问题(以及在Glassfish中配置领域) 使用j_security_check在Java EE / JSF中执行用户身份验证
念炯