gpt4 book ai didi

java session 过滤器

转载 作者:行者123 更新时间:2023-12-04 05:52:42 28 4
gpt4 key购买 nike

在我的 Web 应用程序中,我有 3 个主要部分
1. 客户
2. 供应商
3. 管理员

我正在使用 java session 过滤器来检查用户 session 并允许访问网站的特定部分。
因此客户只能访问客户部分,供应商可以访问供应商部分,管理员可以访问管理部分。

客户的 session 过滤器已经实现并且工作正常。它检查客户身份验证并提供对客户子文件夹的访问权限,其中我有一些 jsp。

如果我希望过滤器检查供应商和管理部分的身份验证并允许他们根据用户级别进行访问。

我需要再创建 2 个过滤器 - 管理员和供应商吗?

目前这是我为客户实现的:

public class SessionFilter implements Filter {



private FilterConfig config;

/** Creates new SessionFilter */
public SessionFilter() {
}

public void init(FilterConfig filterConfig) throws ServletException {

System.out.println("Instance created of " + getClass().getName());
this.config = filterConfig;
}

public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws java.io.IOException, ServletException {

HttpSession session = ((HttpServletRequest) request).getSession();
ServletContext context = config.getServletContext();
/*
* use the ServletContext.log method to log filter messages
*/
context.log("doFilter called in: " + config.getFilterName() + " on "
+ (new java.util.Date()));

// log the session ID
context.log("session ID: " + session.getId());

// Find out whether the logged-in session attribute is set
Object u= session.getAttribute("users");
if (u != null){
chain.doFilter(request, response);
}
else{
//request.getRequestDispatcher("../index.jsp").forward(request, response);
((HttpServletResponse) response).sendRedirect(((HttpServletResponse) response).encodeRedirectURL("../index.jsp?error=userpriv"));
}


}


public void destroy() {

}
}

这是我的 web.xml
<filter>
<filter-name>SessionFilter</filter-name>
<filter-class>controller.SessionFilter</filter-class>
<init-param>
<param-name>avoid-urls</param-name>
<param-value>index.jsp</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>SessionFilter</filter-name>
<url-pattern>/users/*</url-pattern>
</filter-mapping>

最佳答案

为什么不使用 Servlet 身份验证。您只需要定义角色并使用 <security-constraint> 映射到 url。标签。

这是显示如何定义的示例:

客户安全约束

<security-constraint> 
<web-resource-collection>
<web-resource-name>User Restriction</web-resource-name>
<url-pattern>/customers/*</url-pattern>
</web-resource-collection>

<auth-constraint>
<role-name>customer</role-name>
</auth-constraint>
</security-constraint>

供应商的安全约束
<security-constraint> 
<web-resource-collection>
<web-resource-name>User Restriction</web-resource-name>
<url-pattern>/suppliers/*</url-pattern>
</web-resource-collection>

<auth-constraint>
<role-name>supplier</role-name>
</auth-constraint>
</security-constraint>

管理员的安全约束
<security-constraint> 
<web-resource-collection>
<web-resource-name>User Restriction</web-resource-name>
<url-pattern>/admin/*</url-pattern>
</web-resource-collection>

<auth-constraint>
<role-name>administrator</role-name>
</auth-constraint>
</security-constraint>

关于java session 过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9883874/

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