如何阻止通过URL直接访问jsp?

时间:2012-09-24 11:39:18

标签: java

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

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

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

4 个答案:

答案 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)

我理解你的需要是,

  1. 任何未经过身份验证的用户来-------显示------&gt;登录页面
  2. 具有角色客户的经过身份验证的用户-----显示------&gt;与客户相关的菜单项
  3. 具有角色员工的经过身份验证的用户-----显示------&gt;与员工相关的菜单项
  4. 在这种情况下,我认为你应该做的是,

    当此人在此时输入URL时,请检查会话是否为true / set。 为此,您可以将任何变量设置为userName作为键。

    如果未设置会话,则显示常用的登录页面,并在认证后将userName密钥设置为会话,否则为其他。

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

    如果用户属于角色CUSTOMER ------&gt;相应地工作。 如果用户属于角色EMPLOYEE ------&gt;相应的工作。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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