J'apprends JSP depuis si longtemps et j'ai travaillé sur sept ou huit projets, mais dans tous les projets, lorsque l'utilisateur se connecte, il accède directement à la page pour laquelle il a la permission, ou affiche des liens vers des pages accessibles. Utilisez cette approche pour contrôler naïvement l’accès. Je n'aurais jamais pensé que si je ne me connectais pas, je pourrais accéder directement à la page de l'utilisateur en saisissant l'adresse.
Le contrôle des autorisations dans jsp est réalisé via Filter. Tous les frameworks de développement ont un filtre intégré. Si le framework de développement n'est pas applicable, les méthodes d'implémentation suivantes sont disponibles :
ConnexionFilter.java
Copiez le code comme suit :
la classe publique LoginFilter implémente le filtre {
chaîne privée permitUrls[] = null;
chaîne privée gotoUrl = null ;
public void destroy() {
// TODO Stub de méthode généré automatiquement
permitUrls = null;
gotoUrl = null ;
}
public void doFilter (demande ServletRequest, réponse ServletResponse,
Chaîne FilterChain) lance IOException, ServletException {
// TODO Stub de méthode généré automatiquement
HttpServletRequest res=(HttpServletRequest) requête ;
HttpServletResponse resp=(HttpServletResponse)réponse ;
if(!isPermitUrl(request)){
si (filterCurrUrl (requête)) {
System.out.println("--->Veuillez vous connecter");
resp.sendRedirect(res.getContextPath()+gotoUrl);
retour;
}
}
System.out.println("--->Autoriser l'accès");
chain.doFilter(demande, réponse);
}
filtre booléen publicCurrUrl (requête ServletRequest){
filtre booléen = faux ;
HttpServletRequest res=(HttpServletRequest) requête ;
Utilisateur utilisateur =(Utilisateur) res.getSession().getAttribute("utilisateur");
si (null == utilisateur)
filtre=vrai ;
filtre de retour ;
}
public boolean isPermitUrl (demande ServletRequest) {
booléen isPermit = faux ;
Chaîne currentUrl = currentUrl (requête);
if (permitUrls != null && permitUrls.length > 0) {
pour (int i = 0; i < permitUrls.length; i++) {
if (permitUrls[i].equals(currentUrl)) {
estPermit = vrai ;
casser;
}
}
}
retourner isPermit ;
}
// demande d'adresse
public String currentUrl (demande ServletRequest) {
HttpServletRequest res = (HttpServletRequest) requête ;
Chaîne task = request.getParameter("task");
Chemin de chaîne = res.getContextPath();
Chaîne uri = res.getRequestURI();
if (task != null) {//uri format xx/ser
uri = uri.substring(path.length(), uri.length()) + "?"
+ tâche ;
} autre {
uri = uri.substring(path.length(), uri.length());
}
System.out.println("Adresse actuelle de la demande :" + uri);
renvoyer l'uri ;
}
public void init (FilterConfig filterConfig) lance ServletException {
// TODO Stub de méthode généré automatiquement
Chaîne permitUrls = filterConfig.getInitParameter("permitUrls");
Chaîne gotoUrl = filterConfig.getInitParameter("gotoUrl");
this.gotoUrl = gotoUrl;
if (permitUrls != null && permitUrls.length() > 0) {
this.permitUrls = permitUrls.split(",");
}
}
}
Web.xml
Copiez le code comme suit :
<filtre>
<filter-name>loginFilter</filter-name>
<filter-class>filter.LoginFilter</filter-class>
<param-init>
<param-name>ignorer</param-name>
<param-value>faux</param-value>
</init-param>
<param-init>
<param-name>permitUrls</param-name>
<param-value>/,/servlet/Loginservlet?task=login,/public.jsp,/login.jsp</param-value>
</init-param>
<param-init>
<param-name>gotoUrl</param-name>
<param-value>/login.jsp</param-value>
</init-param>
</filtre>
<cartographie de filtre>
<filter-name>loginFilter</filter-name>
<modèle-url>/*</modèle-url>
</filter-mapping>
Ce code court implémente principalement le filtrage des connexions des utilisateurs, et le principe du filtrage des autorisations est le même. Changez simplement le jugement selon lequel l'utilisateur est connecté ou non et s'il a l'autorisation !