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