2017-07-14 138 views
1

我做了主要采用JSP和Tomcat作为我的服务器此应用程序。设置授权Java EE应用程序

我试图建立授权级别,其中某些类别的用户可以做某些东西(访问特定页面,如创建新记录或搜索过去的记录),如创造新的用户只能由管理员来完成。

我现在所做的是第一:登录成功

<% 
    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"); 
    } 
%> 

后,我会再拉值从数据库角色,并将其设置为会话属性。再后来,在我的createNewUser页,我有这样的检查,如果用户是指定的角色

<% 
    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 
    } 
%> 

的但是我意识到,这种方法是无效的,因为我将不得不把支票在每个页面上,如果有在未来的变化,我将不得不逐页去改变代码。 是有一个控制单独一个页面上的所有权限级别的方法?而不是要做到这一点我所有的JSP文件

回答

1

最好的,你可以做的是使用HTTP filter。每个请求都将通过您的过滤器进行验证。当然,这只会阻止用户访问资源(页/图像等),但它不作为授权你的方法和用户交互。

  • @WebFilter("/*")每个资源
  • @WebFilter("/user/*")资源下的用户文件夹管理文件夹
  • @WebFilter("/what/ever/*")

例下

  • @WebFilter("/admin/*")资源:

    @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

    喜,所以你所建议的,我可以用它来取代我需要在每一页写检查,以控制用户能够访问正确的资源?例如,限制非管理员用户进入createNewUser页面。谢谢你的帮助。 – sicnarfmis