Java 如何限制JSP/Servlet中的每个用户角色?

Java 如何限制JSP/Servlet中的每个用户角色?,java,jsp,jakarta-ee,servlets,Java,Jsp,Jakarta Ee,Servlets,我想在我的JPS web应用程序中提供许多用户。我不想有很多网页被重定向为每个用户。我只希望所有用户都有一个页面。例如,我有一个页面包含添加、编辑和删除按钮,这是管理员用户的主要或唯一角色。如果登录用户不是管理员,我不希望任何用户有权添加、编辑和删除 即使您为不同的角色使用相同的JSP页面,这也是可能的。JSP在服务器中编译并在发送到客户端之前转换为原始HTML&js 所以在JSP页面中,您可以放置用户角色的条件基础。像- 罗金瑟夫莱特酒店- public class LonginServelt

我想在我的JPS web应用程序中提供许多用户。我不想有很多网页被重定向为每个用户。我只希望所有用户都有一个页面。例如,我有一个页面包含添加、编辑和删除按钮,这是管理员用户的主要或唯一角色。如果登录用户不是管理员,我不希望任何用户有权添加、编辑和删除

即使您为不同的角色使用相同的JSP页面,这也是可能的。JSP在服务器中编译并在发送到客户端之前转换为原始HTML&js

所以在JSP页面中,您可以放置用户角色的条件基础。像-

罗金瑟夫莱特酒店-

public class LonginServelt extends HttpServlet{
    public void doPost(HttpServletRequest request, HttpServletResponse response){
        User user = userService.checkUserCredential(username,password);
        Session session = request.getSession();
        session.setAttribute("user",user);
    }
}

<c:choose>
  <c:when test="${isAdmin}">
    You got Gold 
  </c:when>

  <c:when test="${isCustomer}">
    You got Silver 
  </c:when>

  <c:when test="${isProducer}">
    You got Bronze 
  </c:when>

  <c:otherwise>
    Better luck next time 
  </c:otherwise>
</c:choose>
公共类LonginServlet扩展了HttpServlet{
public void doPost(HttpServletRequest请求、HttpServletResponse响应){
User=userService.checkUserCredential(用户名、密码);
Session Session=request.getSession();
session.setAttribute(“用户”,user);
}
}
你有金子吗
你有银牌吗
你有铜牌吗
祝你下次好运
所以,当用户在服务器中使用不同的角色访问此页面时,它将填充依赖于角色的html

注意:您甚至可以使用scriplet来放置被视为 旧技术


即使您为不同的角色使用相同的JSP页面,这也是可能的。JSP在服务器中编译并在发送到客户端之前转换为原始HTML&js

所以在JSP页面中,您可以放置用户角色的条件基础。像-

罗金瑟夫莱特酒店-

public class LonginServelt extends HttpServlet{
    public void doPost(HttpServletRequest request, HttpServletResponse response){
        User user = userService.checkUserCredential(username,password);
        Session session = request.getSession();
        session.setAttribute("user",user);
    }
}

<c:choose>
  <c:when test="${isAdmin}">
    You got Gold 
  </c:when>

  <c:when test="${isCustomer}">
    You got Silver 
  </c:when>

  <c:when test="${isProducer}">
    You got Bronze 
  </c:when>

  <c:otherwise>
    Better luck next time 
  </c:otherwise>
</c:choose>
公共类LonginServlet扩展了HttpServlet{
public void doPost(HttpServletRequest请求、HttpServletResponse响应){
User=userService.checkUserCredential(用户名、密码);
Session Session=request.getSession();
session.setAttribute(“用户”,user);
}
}
你有金子吗
你有银牌吗
你有铜牌吗
祝你下次好运
所以,当用户在服务器中使用不同的角色访问此页面时,它将填充依赖于角色的html

注意:您甚至可以使用scriplet来放置被视为 旧技术


您需要的是一个筛选器一个会话筛选器准确地说,您可以尝试以下方法:

我假设您有一个用户类,如果没有:

User.java

public class User implements Serializable {
  private int accountId;
  private String loginId;
  private Role type;

  public User(int accountId, String loginId, Role type) {
    this.accountId = accountId;
    this.loginId = loginId;
    this.type = type;
  }

  public User() {
    this.accountId = -1;
    this.loginId = null;
    this.type = null;
  }

  public void setRole(Role type) {
    this.type = type;
  }

  public Role getRole() {
    return this.type;
  }

  public void setAccountId(int accountId) {
    this.accountId = accountId;
  }

  public int getAccountId() {
    return this.accountId;
  }

  public void setLoginId(String loginId) {
    this.loginId = loginId;
  }

  public String getLoginId() {
    return this.loginId;
  }
}
您还可以为您的角色类型创建枚举:

Role.java

public enum Role {

  ADMINISTRATOR, STAFF;
}
在login.jsp中,这只是一个示例,让您了解:

<%
  //put your login query stuff here
  User user = new User();
  user.setAccountId(1);
  user.setLoginId("adminaccount01);
  user.setRole(Role.ADMINISTRATOR);
  session.setAttribute("LOGIN_USER", user);
%>
并添加不要忘记将这些添加到web.xml

  <filter>
    <filter-name>SessionCheckFilter</filter-name>
    <filter-class>package_name_if_there_is_any.SessionCheckFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>SessionCheckFilter</filter-name>
    <url-pattern>/your_path/*</url-pattern> 
  </filter-mapping>

会话检查过滤器
包\u名称\u如果有\u any.SessionCheckFilter
会话检查过滤器
/您的路径/*

您想要的是一个过滤器一个会话过滤器准确地说,您可以尝试以下方法:

我假设您有一个用户类,如果没有:

User.java

public class User implements Serializable {
  private int accountId;
  private String loginId;
  private Role type;

  public User(int accountId, String loginId, Role type) {
    this.accountId = accountId;
    this.loginId = loginId;
    this.type = type;
  }

  public User() {
    this.accountId = -1;
    this.loginId = null;
    this.type = null;
  }

  public void setRole(Role type) {
    this.type = type;
  }

  public Role getRole() {
    return this.type;
  }

  public void setAccountId(int accountId) {
    this.accountId = accountId;
  }

  public int getAccountId() {
    return this.accountId;
  }

  public void setLoginId(String loginId) {
    this.loginId = loginId;
  }

  public String getLoginId() {
    return this.loginId;
  }
}
您还可以为您的角色类型创建枚举:

Role.java

public enum Role {

  ADMINISTRATOR, STAFF;
}
在login.jsp中,这只是一个示例,让您了解:

<%
  //put your login query stuff here
  User user = new User();
  user.setAccountId(1);
  user.setLoginId("adminaccount01);
  user.setRole(Role.ADMINISTRATOR);
  session.setAttribute("LOGIN_USER", user);
%>
并添加不要忘记将这些添加到web.xml

  <filter>
    <filter-name>SessionCheckFilter</filter-name>
    <filter-class>package_name_if_there_is_any.SessionCheckFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>SessionCheckFilter</filter-name>
    <url-pattern>/your_path/*</url-pattern> 
  </filter-mapping>

会话检查过滤器
包\u名称\u如果有\u any.SessionCheckFilter
会话检查过滤器
/您的路径/*

但如何在登录并调用jsp页面中的值时设置用户角色?您必须在登录中验证用户凭据,并验证应保存到服务器会话中的用户dto或模型(request.getSession(false))。您将从会话中获得jsp页面中的用户角色。很抱歉,我发现自己更难理解这一部分,因为我对这一部分非常陌生…您能为我提供一个示例解决方案吗?谢谢:)检查我试图使用上面的示例…我将jstl jar文件添加到我的构建路径中,但仍然存在此错误rg.apache.jasper.JasperException:/WEB-INF/jsp/home.jsp(第1行,第1列)绝对uri:无法在web.xml或与此应用程序一起部署的jar文件中解析,但如何在登录并调用jsp页面中的值时设置用户角色?必须在登录中验证用户凭据,并验证应保存到服务器会话中的用户dto或模型(request.getSession(false))。您将从会话中获得jsp页面中的用户角色。很抱歉,我发现自己更难理解这一部分,因为我对这一部分非常陌生…您能为我提供一个示例解决方案吗?谢谢:)检查我试图使用上面的示例…我将jstl jar文件添加到我的构建路径中,但仍然存在此错误rg.apache.jasper.JasperException:/WEB-INF/jsp/home.jsp(第1行,第1列)绝对uri:无法在WEB.xml或与此应用程序一起部署的jar文件中解析