Вход в JSF HTTP сессию
Я пытаюсь создать форму входа в веб-приложение. на странице JSP я могу использовать
<%
String name = request.getParameter( "username" );
session.setAttribute( "theName", name );
%>
но теперь я использую JSF / Facelets для веб-приложения. Я не знаю, как создать сеанс в компоненте JSF Backing для клиента и проверить, вошел ли пользователь в систему или нет, поэтому он будет перенаправлен на страницу входа. Кто может помочь мне дать ссылку на учебник по этой проблеме? спасибо, прежде чем
Теперь у меня есть небольшая проблема с отображением в коде web.xml, отсекаемом от класса Filter.
@Override
public void init(FilterConfig filterConfig) throws ServletException {
this.config = filterConfig;
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;
LoginController controller = (LoginController) req.getSession()
.getAttribute("loginController");
if (controller == null || !controller.isLoggedIn()) {
res.sendRedirect("../admin/login.xhtml");
} else {
chain.doFilter(request, response);
}
}
И вweb.xml
Я сопоставляю с<fitler>
тег
<filter>
<filter-name>userLoginFilter</filter-name>
<filter-class>com.mcgraw.controller.UserLoginFilter</filter-class>
<init-param>
<param-name>loginPage</param-name>
<param-value>/login.xhtml</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>userLoginFilter</filter-name>
<url-pattern>/admin/*</url-pattern>
</filter-mapping>
У меня есть одна папка admin в веб-проекте, и я проверяю, не вошел ли пользователь с правами администратора, чтобы не заходить на страницу (я могу выполнить проверку разрешений), но когда я использую фильтр, браузер не понимает URL-адрес ?? не показывать StackTrace, когда браузер не понимает URL
Ошибка отображается в Firefox
The page isn't redirecting properly
на IE это загрузка ... загрузка. .. без остановки
теперь я изменяю условие, которое проверяет, если req.getPathInfo.startsWith ("/ login.xhtml") будет делать цепочку
У меня есть 2 идеи, но это ответ 500 HTTP STATUS
if (controller == null || !controller.isLoggedIn()) {
res.sendRedirect("../admin/login.xhtml");
if(req.getPathInfo().startsWith("/login.xhtml")){
chain.doFilter(request, response);
}
} else {
chain.doFilter(request, response);
}
===============
if (controller == null || !controller.isLoggedIn()) {
if (!req.getPathInfo().startsWith("/login.xhtml")) {
res.sendRedirect("../admin/login.xhtml");
} else {
chain.doFilter(request, response);
}
} else {
chain.doFilter(request, response);
}
====================== Обновление класса loginController
package com.mcgraw.controller;
import com.DAO.UserBean;
import com.entity.IUser;
import java.io.Serializable;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
/**
* @author Kency
*/
@ManagedBean
@SessionScoped
public class LoginController implements Serializable {
@EJB
private UserBean userBean;
private IUser user;
private boolean admin;
private boolean mod;
private PasswordService md5;
/** Creates a new instance of LoginController */
public LoginController() {
user = new IUser();
md5 = new PasswordService();
}
// getter / setter
public boolean isMod() {
return mod;
}
public void setMod(boolean mod) {
this.mod = mod;
}
public IUser getUser() {
return user;
}
public void setUser(IUser user) {
this.user = user;
}
public boolean isAdmin() {
return admin;
}
public void setAdmin(boolean admin) {
this.admin = admin;
}
public String cplogin() {
String md5Password = md5.md5Password(user.getPassword());
if (userBean.userLogin(user.getUsername(), md5Password) != null) {
if (user.getUsername() != null || md5Password != null) {
user = userBean.userLogin(user.getUsername(), md5Password);
if (user.getGroups().getAdmin() != null) {
setAdmin(user.getGroups().getAdmin());
}
if (user.getGroups().getMods() != null) {
setMod(user.getGroups().getMods());
}
if (isAdmin() == true || isMod() == true) {
return "home";
} else {
return "login";
}
} else {
return "login";
}
} else {
return "login";
}
}
public String logout() {
user = null;
return "login";
}
public boolean isLoggedIn() {
return user != null;
}
}
У меня новая проблема, если визуализировать JSF taglib с помощью метода loggedIn, на индексной странице (не в папке администратора) пользователь не авторизуется, может видеть то, что я представляю, <== это похоже на то, что если пользователь не авторизуется, пользователь не может видеть, но почему он это видит?