2

我正在用java开发一个Web应用程序。为了防止直接访问 url,我使用了检查会话验证的代码。它是一个客户员工应用程序。

在除登录页面之外的每个页面中,我都有相同的标题,其中菜单项是使用会话动态生成的,具体取决于角色。但是,当员工直接访问 url 时,应该只有客户可以访问,url 仍然可以访问。不应该是这样的。

如何防止员工使用仅对客户有效的 url 直接访问 jsp?

4

4 回答 4

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>

使用过滤器映射标签映射您的每个安全请求 URL,如下所示。

 <filter-mapping>
      <filter-name>SessionCheckFilter</filter-name>
      <url-pattern>/personal-info</url-pattern>
    </filter-mapping>
于 2012-09-24T12:03:13.143 回答
1

我理解你的需要是,

  1. 任何未经验证的用户都来了--------显示----->登录页面
  2. 具有客户角色的经过身份验证的用户-----显示----->与客户相关的菜单项
  3. 具有角色 Employee 的经过身份验证的用户----显示----->与 Employee 相关的菜单项

在这种情况下,我认为你应该做的是,

当人员此时输入 URL 时,检查会话是否为真/设置。为此,您可以将任何变量(如 userName)设置为键。

如果未设置会话,则显示通用登录页面,并在身份验证后将用户名密钥设置为会话,否则不会。

如果设置了会话(您可以再次检查 userName 键以验证会话是否存在),然后检查用户的角色,

如果用户属于角色 CUSTOMER ------> 相应地工作。如果用户属于角色 EMPLOYEE ------> 相应地工作。

于 2012-09-24T12:13:08.453 回答
0

您只是在检查会话是否有效。您需要检查会话参数之一,例如用户名或客户 ID。

于 2012-09-24T11:46:30.023 回答
0

使用过滤器仅允许经过身份验证的请求访问资源

于 2012-09-24T11:43:22.747 回答