我正在用java开发一个Web应用程序。为了防止直接访问 url,我使用了检查会话验证的代码。它是一个客户员工应用程序。
在除登录页面之外的每个页面中,我都有相同的标题,其中菜单项是使用会话动态生成的,具体取决于角色。但是,当员工直接访问 url 时,应该只有客户可以访问,url 仍然可以访问。不应该是这样的。
如何防止员工使用仅对客户有效的 url 直接访问 jsp?
我正在用java开发一个Web应用程序。为了防止直接访问 url,我使用了检查会话验证的代码。它是一个客户员工应用程序。
在除登录页面之外的每个页面中,我都有相同的标题,其中菜单项是使用会话动态生成的,具体取决于角色。但是,当员工直接访问 url 时,应该只有客户可以访问,url 仍然可以访问。不应该是这样的。
如何防止员工使用仅对客户有效的 url 直接访问 jsp?
应用过滤器,
public class SessionCheck implements Filter
{
public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException
{
HttpServletRequest request = (HttpServletRequest) arg0;
HttpServletResponse response = (HttpServletResponse) arg1;
if(null==((String) request.getSession().getAttribute("SESSION_PARAM_CUSTOMERID")) || ((String) request.getSession().getAttribute("SESSION_PARAM_CUSTOMERID")).equals(""))
{
response.sendRedirect(PAGE_SIGN_IN);
return;
}
arg2.doFilter(request, response);
}
}
web.xml
<filter>
<filter-name>SessionCheckFilter</filter-name>
<filter-class>
com.mycomp.filter.SessionCheck
</filter-class>
</filter>
使用过滤器映射标签映射您的每个安全请求 URL,如下所示。
<filter-mapping>
<filter-name>SessionCheckFilter</filter-name>
<url-pattern>/personal-info</url-pattern>
</filter-mapping>
我理解你的需要是,
在这种情况下,我认为你应该做的是,
当人员此时输入 URL 时,检查会话是否为真/设置。为此,您可以将任何变量(如 userName)设置为键。
如果未设置会话,则显示通用登录页面,并在身份验证后将用户名密钥设置为会话,否则不会。
如果设置了会话(您可以再次检查 userName 键以验证会话是否存在),然后检查用户的角色,
如果用户属于角色 CUSTOMER ------> 相应地工作。如果用户属于角色 EMPLOYEE ------> 相应地工作。
您只是在检查会话是否有效。您需要检查会话参数之一,例如用户名或客户 ID。
使用过滤器仅允许经过身份验证的请求访问资源