2017-07-14 1 views
1

Je crée cette application en utilisant principalement JSP et Tomcat comme serveur. J'essaye de mettre en place des niveaux d'autorisation par lesquels certaines catégories d'utilisateurs peuvent faire certaines choses (accéder à certaines pages comme créer de nouveaux enregistrements ou rechercher des enregistrements passés), par exemple créer un nouvel utilisateur.Définition de l'autorisation pour l'application Java EE

Qu'est-ce que je l'ai fait maintenant est d'abord:

<% 
    String user = request.getParameter("name");  
    String pwd = request.getParameter("password"); 

    String sql = "select * from members where name = ? and password = ?"; 

    int role = 0; 

    // since execute returns an int of 1 or 0, we can use it for our if-else statement 
    if (BaseDAO.check(sql, user, pwd) != 0) { 
     session.setAttribute("user", user); 
     role = BaseDAO.checkRole(sql, user, pwd); 
     session.setAttribute("role", role); 
     response.sendRedirect("frameMgr.jsp"); 
    } else { 
     session.setAttribute("login", 0); 
     response.sendRedirect("loginPage.jsp"); 
    } 
%> 

Après connexion est réussie, je puis tirer la valeur pour le rôle de la base de données et le mettre à l'attribut de session. Puis plus tard, à ma page createNewUser, j'ai ce pour vérifier si l'utilisateur est le rôle attribué

<% 
    int role = (Integer) session.getAttribute("role"); 
    // only allow people with admin role to create more accounts 
    if (role != 5) { 
     response.sendRedirect("frameContent.jsp"); //back to homepage 
    } 
%> 

Cependant j'ai réalisé que cette méthode est inefficace que je dois mettre le contrôle sur chaque page et s'il y a les changements dans le futur je devrais aller page par page pour changer le code. existe-t-il une méthode pour contrôler tous les niveaux d'autorisation sur une seule page? plutôt que d'avoir à le faire sur tous mes fichiers jsp

Répondre

1

Le meilleur que vous pouvez faire est d'utiliser HTTP filter. Chaque demande va être validée avec votre filtre. Bien sûr, cela ne fera qu'empêcher l'utilisateur d'accéder aux ressources (page/images etc.). Mais cela ne sert pas d'autorisateur pour vos méthodes et interactions utilisateur.

  • @WebFilter("/*") Toutes les ressources
  • @WebFilter("/user/*") ressources sous le dossier utilisateur
  • @WebFilter("/admin/*") Ressources sous dossier admin
  • @WebFilter("/what/ever/*")

Exemple:

@WebFilter("/user/*") 
public class UserFilter implements Filter { 


    @Override 
    public void init(FilterConfig filterConfig) throws ServletException { 

    } 

    @Override 
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { 
     HttpServletRequest req = (HttpServletRequest) servletRequest; 
     HttpServletResponse res = (HttpServletResponse) servletResponse; 

     if (/*Check if user is logged*/) { 
      filterChain.doFilter(servletRequest, servletResponse); 
     } else { 
      res.sendRedirect(req.getContextPath() + "/login.jsp"); 
     } 

    } 

    @Override 
    public void destroy() { 

    } 
} 
+0

salut, donc vous suggérez que je peux employer ceci pour remplacer le contrôle que j'ai besoin d'écrire dans chaque page pour contrôler les ressources qu'un utilisateur peut accéder juste? Par exemple, interdisez aux utilisateurs non administrateurs d'accéder à la page createNewUser. Merci de votre aide. – sicnarfmis