我正在使用 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/