JSF HTTP Session Login
Ich versuche, ein Anmeldeformular in einer Webanwendung zu erstellen. in JSP-Seite kann ich @ verwend
<%
String name = request.getParameter( "username" );
session.setAttribute( "theName", name );
%>
aber jetzt verwende ich JSF / Facelets für die Webanwendung. Ich kann keine Sitzung in JSF Backing Bean für den Client erstellen und prüfen, ob der Benutzer angemeldet ist oder nicht, damit er zur Anmeldeseite weitergeleitet wird. Wer kann mir helfen, mir ein Link-Tutorial für dieses Problem zu geben? danke vor
Now Ich habe ein kleines Problem mit der Zuordnung in web.xml-Code der Klasse Filter geschnitten
@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);
}
}
und inweb.xml
Ich Karte mit<fitler>
Etiket
<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>
Ich habe einen Ordner admin im Webprojekt und ich überprüfe, ob der Benutzer nicht mit Administratorberechtigung angemeldet ist, um nicht auf die Seite zuzugreifen (ich kann die Berechtigungsprüfung durchführen), aber wenn ich den Filter verwende, versteht der Browser die URL nicht? Keine StackTrace-Show, wenn der Browser url @ nicht verste
Error wird in Firefox angezeigt
The page isn't redirecting properly
on IE wird geladen ... wird geladen. .. non-stop
Jetzt ändere ich die Bedingung, die prüft, ob req.getPathInfo.startsWith ("/ login.xhtml") eine Verkettung durchführt.
Ich habe 2 Idee, aber es Antwort 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);
}
====================== Klasse loginController aktualisieren
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;
}
}
Ich habe ein neues Problem, wenn die JSF-TagLib mit der Methode "eingeloggt" gerendert wird. Auf der Indexseite (nicht im Admin-Ordner) kann sich der Benutzer nicht anmelden aber warum kann er es sehen?