当我获得所有权限的访问权限时登录不起作用,如果我使用普通用户登录,它会将我重定向到/ admin而不是/ app,我试图解决问题,但我没有'我知道我做错了什么。 我想创建一个唯一的管理员,用户名:admin和密码:admin, 我有一个名为admin的boolean属性的User类。 代码如下:
WebFilter for Users:
@WebFilter("/app/*")
public class FiltroRegistro implements Filter {
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;
HttpSession session = req.getSession(false);
String loginURI = req.getContextPath() + "/login.jsp";
if (session != null && session.getAttribute("usuario") != null) {
chain.doFilter(req, res);
} else {
res.sendRedirect(loginURI);
}
}
WebFilter for admin:
@WebFilter("/admin/*") public class FiltroAdministrador implements
Filter {
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;
HttpSession session = req.getSession(false);
String loginURI = req.getContextPath() + "/login.jsp";
if (session != null && session.getAttribute("administrador") != null) {
chain.doFilter(req, res);
} else {
res.sendRedirect(loginURI);
}
}
登录servlet:
@WebServlet("/FiltroServlet")
public class FiltroRegistroServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
request.setCharacterEncoding("UTF-8");
String nombreUsuario = request.getParameter("nombreUsuario");
String contrasenia = request.getParameter("contrasenia");
GestionUsuarios gestionUsuarios = new GestionUsuarios();
Usuario admin = gestionUsuarios.registrarAdministrador(nombreUsuario, contrasenia);
//Usuario admin = gestionUsuarios.registrarAdministrador(nombreUsuario, contrasenia);
Usuario usuario = gestionUsuarios.registrarUsuario(nombreUsuario, contrasenia);
if (admin != null) {
HttpSession session = request.getSession(true);
session.setAttribute("administrador", admin);
response.sendRedirect("admin/TablaEventosAdmin");
} else if (usuario != null) {
HttpSession session = request.getSession(true);
session.setAttribute("usuario", usuario);
response.sendRedirect("app/TablaEventosServlet");
response.sendRedirect("loginError.jsp");
} else {
response.sendRedirect("login.jsp");
}
}
用户和管理员在业务层中的登录方法,默认情况下为admin创建(全部在同一个类中)
public GestionUsuarios() {
daoUsuario = new DaoUsuarioHibernate();
Usuario admin = new Usuario("admin", "admin", true);
daoUsuario.add(admin);
}
public Usuario registrarUsuario(String nombreUsuario, String contrasenia) {
return daoUsuario.ObtenerUsuarioPorNombreYContrasenia(new Usuario(nombreUsuario, contrasenia, false));
}
public Usuario registrarAdministrador(String usuario, String contrasenia){
return daoUsuario.ObtenerUsuarioPorNombreYContrasenia(new Usuario(usuario,contrasenia, true));
}
The jsp structure, /app for normal users and /admin for all privileges