【问题标题】:How to prevent user from accessing a certain HTML page if no session exists [duplicate]如果不存在会话,如何防止用户访问某个 HTML 页面[重复]
【发布时间】:2021-12-29 22:02:12
【问题描述】:

我正在使用 HTML/CSS/Javascript/JSP 和 Tomcat v10 Java Servlets 创建一个网站,并构建了一个登录系统,一旦用户登录就会创建一个 HttpSession。即使这会动态删除登录按钮,也没有任何内容阻止该用户将 url 复制并粘贴到登录页面。

如果会话不存在,是否有一种有效的方法可以立即重定向到不同的 html 文件?我看到其他一些使用 PHP 的帖子,但我从未使用过该技术,并希望有一种不同的方式。

【问题讨论】:

    标签: java web session servlets httpsession


    【解决方案1】:

    据我所知,JSP 的 url 被视为对服务器的请求

    您可以使用Filter

    过滤器用于对请求进行前后处理,您可以使用它来检查入站请求是否有会话

    类似这样的:

    HttpServletRequest httpRequest = (HttpServletRequest)request;
        HttpServletResponse httpResponse = (HttpServletResponse)response;
        HttpSession session = httpRequest.getSession();
        AdUser user = (AdUser)session.getAttribute("user");
        if (user == null) {
            httpRequest.setAttribute("errorMessage", "You must login first");
            httpRequest.getRequestDispatcher("Authenticate.jsp").forward(request, response);
        } else {
            chain.doFilter(request, response);
        }
    

    【讨论】:

    • 有道理,谢谢。但是我将如何指定哪个 servlet 正在处理这个问题呢?我知道您为 指定了一个 但我是否需要在我的 JSP 文件中的某处添加哪个 servlet doGet 方法将执行此操作?
    • @TTT 是的,在您的具体情况下,方法是 get,然后您可以将 getRequestDispatcher 替换为 sendRedirect 到 servlet
    【解决方案2】:

    您应该使用Java EE security API,而不是创建自己的过滤器

    创建仅允许经过身份验证的用户访问应用程序的给定部分的安全约束。在这种情况下,服务器将确保未经身份验证的用户无法访问给定页面。

    如果 Tomcat 没有完全实现该规范,您可以使用完全实现 Java EE API 的开源 OpenLiberty 服务器。

    类似的东西(不完整的代码只是一个示例,给你一个想法):

    <!-- SECURITY CONSTRAINT -->
    <security-constraint>
        <web-resource-collection>
            <web-resource-name>protected pages</web-resource-name>
            <url-pattern>/html/*</url-pattern>
        </web-resource-collection>
        <auth-constraint>
            <role-name>AUTH_USER</role-name>
        </auth-constraint>
        <user-data-constraint>
            <transport-guarantee>CONFIDENTIAL</transport-guarantee>
        </user-data-constraint>
    </security-constraint>
    <login-config>
        <auth-method>FORM</auth-method>
        <realm-name>file</realm-name>
        <form-login-config>
            <form-login-page>/login.jsp</form-login-page>
            <form-error-page>/error.jsp</form-error-page>
        </form-login-config>
    </login-config>
    ....
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-24
      • 1970-01-01
      相关资源
      最近更新 更多