gpt4 book ai didi

java - 设置Java EE应用程序的授权

转载 作者:行者123 更新时间:2023-11-30 06:36:42 25 4
gpt4 key购买 nike

我主要使用 JSP 和 Tomcat 作为我的服务器来完成这个应用程序。

我正在尝试设置授权级别,使某些类别的用户可以执行某些操作(访问某些页面,例如创建新记录或搜索过去的记录),例如创建新用户只能由管理员完成。

我现在所做的是首先:

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

登录成功后,我将从数据库中提取角色的值并将其设置为 session 属性。然后稍后在我的 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("/admin/*") admin文件夹下的资源
  • @WebFilter("/what/ever/*")

示例:

@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() {

}
}

关于java - 设置Java EE应用程序的授权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45098785/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com