【发布时间】:2013-04-06 12:59:07
【问题描述】:
这就是我解决问题的方法。 :) 我要保护的页面位于 cPanel 文件夹中。这是我的 LoginAdmin bean。
@ManagedBean(name = "loginAdmin")
@SessionScoped
public class LoginAdmin implements Serializable {
private static final long serialVersionUID = 1L;
private String username;
private String password;
boolean loggedIn;
public boolean isLoggedIn() {
return loggedIn;
}
public void setLoggedIn(boolean loggedIn) {
this.loggedIn = loggedIn;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public void login(ActionEvent actionEvent) {
FacesMessage msg = null;
if (username.equals("Administrator") && password.equals("store1")) {
try {
msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Welcome",
username);
FacesContext.getCurrentInstance().getExternalContext()
.redirect("/eHUB/cPanel/index.xhtml");
loggedIn = true;
} catch (IOException e) {
e.printStackTrace();
}
} else {
msg = new FacesMessage(FacesMessage.SEVERITY_WARN, "Login Error",
"Invalid User Name or Password");
loggedIn = false;
}
FacesContext.getCurrentInstance().addMessage(null, msg);
}
public void logout(ActionEvent actionEvent) throws IOException {
((HttpSession) FacesContext.getCurrentInstance().getExternalContext()
.getSession(false)).invalidate();
loggedIn = false;
FacesContext.getCurrentInstance().getExternalContext().redirect("login.xhtml");
}
}
这是我的过滤代码:
@WebFilter("/cPanel/*")
public class RestrictFilter implements Filter {
private FilterConfig fc;
public RestrictFilter() {
}
public void destroy() {
}
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
LoginAdmin loginAdmin = (LoginAdmin) request.getSession().getAttribute("loginAdmin");
String loginURL = request.getContextPath() + "/login.xhtml";
if(loginAdmin != null && loginAdmin.isLoggedIn()){
chain.doFilter(req, res);
}
else{
response.sendRedirect(loginURL);
}
}
public void init(FilterConfig fConfig) throws ServletException {
this.fc = fConfig;
}
}
这是完美的工作。请对这篇文章投反对票。再一次感谢你。 :)
【问题讨论】:
-
你忘了告诉你这段代码的具体问题。
-
我希望用户在查看 index.xhtml 页面之前必须输入他/她的凭据。在当前情况下,用户可以在没有登录页面的情况下查看 index.xhtml 页面。这是我的具体问题。
标签: session jsf-2 servlet-filters