我正在使用java中的Web应用程序。为了防止直接访问URL,我使用了检查会话验证的代码。它是一个客户雇员的应用程序。
在除登录页面之外的每个页面中,我都有相同的标题,其中菜单项是使用会话动态生成的,具体取决于角色。但是,当员工直接访问网址时,只能由客户访问,网址仍可访问。它应该不是这样的。
如何使用仅对客户有效的网址阻止员工直接访问jsp?
答案 0 :(得分:2)
应用过滤器,
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>
使用过滤器映射标记映射每个安全请求网址,如下所示。
<filter-mapping>
<filter-name>SessionCheckFilter</filter-name>
<url-pattern>/personal-info</url-pattern>
</filter-mapping>
答案 1 :(得分:1)
我理解你的需要是,
在这种情况下,我认为你应该做的是,
当此人在此时输入URL时,请检查会话是否为true / set。 为此,您可以将任何变量设置为userName作为键。
如果未设置会话,则显示常用的登录页面,并在认证后将userName密钥设置为会话,否则为其他。
如果设置了会话(您可以再次检查userName密钥以验证会话是否存在),然后检查用户的角色,
如果用户属于角色CUSTOMER ------&gt;相应地工作。 如果用户属于角色EMPLOYEE ------&gt;相应的工作。
答案 2 :(得分:0)
使用过滤器仅允许经过身份验证的请求访问资源
答案 3 :(得分:0)
您只是检查会话是否有效。 您需要检查其中一个会话参数,例如用户名或客户ID。