设置授权Java EE应用程序
问题描述:
我做了主要采用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文件
答
最好的,你可以做的是使用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() {
}
}
喜,所以你所建议的,我可以用它来取代我需要在每一页写检查,以控制用户能够访问正确的资源?例如,限制非管理员用户进入createNewUser页面。谢谢你的帮助。 – sicnarfmis