java - Spring MVC中如何限制用户登录前访问特定页面?

标签 java hibernate maven spring-mvc web-applications

我正在使用 hibernate 在 maven spring mvc 中制作简单的 Web 应用程序项目。我已经设置了所有 Controller 并且一切正常。现在我要对尚未登录的用户进行限制。我不想让他们在登录之前进入。而且在他们注销后,他们应该被扔掉。我该怎么做?

最佳答案

您可以使用 Servlet filter 。这是一个可以拦截针对您的 Web 应用程序的 HTTP 请求的对象。

servlet 过滤器可以拦截 servlet、JSP、HTML 文件或其他静态内容的请求,如下图所示。

为了创建 servlet 过滤器,您必须实现 javax.servlet.Filter 接口(interface)。

public class SimpleServletFilter implements Filter {

    public void init(FilterConfig filterConfig) throws ServletException {
    }

    public void doFilter(ServletRequest request, ServletResponse response,
                         FilterChain filterChain)
    throws IOException, ServletException {

    }

    public void destroy() {
    }
}

当 HTTP 请求到达过滤器拦截的 Web 应用程序时,过滤器可以检查请求 URI、请求参数和请求 header ,并据此决定是否要阻止或将请求转发到目标 servlet、JSP 等。

执行拦截的是 doFilter() 方法。这是一个示例实现:

public void doFilter(ServletRequest request, ServletResponse response,
                     FilterChain filterChain)
throws IOException, ServletException {

    String myParam = request.getParameter("myParam");

    if(!"blockTheRequest".equals(myParam)){
        filterChain.doFilter(request, response);
    }
}

请注意 doFilter() 方法如何检查请求参数 myParam,以查看它是否等于字符串“blockTheRequest”。如果没有,则通过调用 filterChain.doFilter() 方法将请求转发到请求的目标。如果不调用该方法,则请求不会被转发,而只是被阻塞。

如果请求参数 myParam 等于“blockTheRequest”,上面的 servlet 过滤器将忽略该请求。您还可以将不同的响应写回浏览器。只需使用 ServletResponse 对象即可执行此操作,就像在 servlet 中一样。

您需要在 Web 应用程序的 web.xml 文件中配置 servlet 过滤器,然后它才能工作。这样做的方法如下:

<filter>
    <filter-name>myFilter</filter-name>
    <filter-class>servlets.SimpleServletFilter</filter-class>
</filter>

<filter-mapping>
    <filter-name>myFilter</filter-name>
    <url-pattern>*.simple</url-pattern>
</filter-mapping>

使用此配置,所有 URL 以 .simple 结尾的请求都将被 servlet 过滤器拦截。所有其他人都将保持不变。

关于java - Spring MVC中如何限制用户登录前访问特定页面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36258938/

相关文章:

java - 如何在多线程代码中避免ConcurrentModificationException

java - 非均匀随机发生器

Java 8 : How to find kth smallest, 高效

java - onActivityResult 方法没有被调用

java - 如果从数据库加载两次,hibernate 是否加载同一实例的两个单独副本?

java - 如何将我自己的代码/函数和外部java库添加到azure函数应用程序

java - ClassNotFoundException org.openqa.selenium.WebDriver

java - 使用 Hibernate 时出现 ORA-02292

Spring JPA 存储库@PostConstruct

java - 越来越严重 : Could not locate SessionFactory in JNDI while getting sessionfactory