He estado aprendiendo JSP durante mucho tiempo y he trabajado en siete u ocho proyectos, pero en todos los proyectos, cuando el usuario inicia sesión, saltará directamente a la página para la que tiene permiso, o mostrará enlaces a páginas accesibles. Utilice este enfoque para controlar ingenuamente el acceso. Nunca pensé que si no iniciaba sesión, podría acceder directamente a la página del usuario ingresando la dirección.
El control de permisos en jsp se logra a través de Filter. Todos los marcos de desarrollo tienen Filter integrado. Si el marco de desarrollo no es aplicable, están disponibles los siguientes métodos de implementación:
LoginFilter.java
Copie el código de código de la siguiente manera:
La clase pública LoginFilter implementa el filtro {
cadena privada permitUrls[] = nulo;
cadena privada gotoUrl = nulo;
destrucción de vacío público () {
// TODO Código auxiliar de método generado automáticamente
permitUrls = nulo;
ir a URL = nulo;
}
doFilter público vacío (solicitud ServletRequest, respuesta ServletResponse,
cadena FilterChain) arroja IOException, ServletException {
// TODO Código auxiliar de método generado automáticamente
HttpServletRequest res=(HttpServletRequest) solicitud;
HttpServletResponse resp=(HttpServletResponse)respuesta;
if(!isPermitUrl(solicitud)){
if(filterCurrUrl(solicitud)){
System.out.println("--->Inicie sesión");
resp.sendRedirect(res.getContextPath()+gotoUrl);
devolver;
}
}
System.out.println("--->Permitir acceso");
chain.doFilter (solicitud, respuesta);
}
filtro booleano públicoCurrUrl (solicitud ServletRequest) {
filtro booleano = falso;
HttpServletRequest res=(HttpServletRequest) solicitud;
Usuario usuario =(Usuario) res.getSession().getAttribute("usuario");
si(nulo==usuario)
filtro = verdadero;
filtro de retorno;
}
isPermitUrl booleano público (solicitud ServletRequest) {
booleano isPermit = falso;
Cadena URL actual = URL actual (solicitud);
if (permitUrls! = nulo && permitUrls.length > 0) {
for (int i = 0; i < permitUrls.length; i++) {
if (permitUrls[i].equals(currentUrl)) {
isPermit = verdadero;
romper;
}
}
}
el retorno esPermitir;
}
//solicitar dirección
cadena pública URL actual (solicitud de solicitud de servlet) {
HttpServletRequest res = solicitud (HttpServletRequest);
Tarea de cadena = request.getParameter("tarea");
Ruta de cadena = res.getContextPath();
Cadena uri = res.getRequestURI();
if (tarea! = nulo) {// formato uri xx/ser
uri = uri.substring(ruta.longitud(), uri.longitud()) + "?" + "tarea="
+ tarea;
} demás {
uri = uri.substring(ruta.longitud(), uri.longitud());
}
System.out.println("Dirección de solicitud actual:" + uri);
devolver uri;
}
public void init (FilterConfig filterConfig) lanza ServletException {
// TODO Código auxiliar de método generado automáticamente
Cadena permitUrls = filterConfig.getInitParameter("permitUrls");
Cadena gotoUrl = filterConfig.getInitParameter("gotoUrl");
this.gotoUrl = ir aUrl;
if (permitUrls! = nulo && permitUrls.length() > 0) {
this.permitUrls = permitUrls.split(",");
}
}
}
Web.xml
Copie el código de código de la siguiente manera:
<filtro>
<filtro-nombre>loginFilter</filtro-nombre>
<filtro-clase>filtro.LoginFilter</filtro-clase>
<parámetro-inicio>
<param-name>ignorar</param-name>
<valor-param>falso</valor-param>
</init-param>
<parámetro-inicio>
<param-name>permitUrls</param-name>
<valor-param>/,/servlet/Loginservlet?task=login,/public.jsp,/login.jsp</param-valor>
</init-param>
<parámetro-inicio>
<param-name>irl</param-name>
<valor-param>/login.jsp</valor-param>
</init-param>
</filtro>
<asignación de filtros>
<filtro-nombre>loginFilter</filtro-nombre>
<patrón-url>/*</patrón-url>
</filtro-mapeo>
Este código corto implementa principalmente el filtrado de inicio de sesión de usuarios y el principio del filtrado de permisos es el mismo. ¡Simplemente cambie el juicio sobre si el usuario ha iniciado sesión o si tiene permiso!