一、首先,创建一个实现了javax.servlet.Filter接口的Java类,例如LoginFilter。
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.IOException;
public class LoginFilter implements Filter {
public void init(FilterConfig config) throws ServletException {
// 初始化操作
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest httpRequest = (HttpServletRequest) request;
HttpServletResponse httpResponse = (HttpServletResponse) response;
String requestURI = httpRequest.getRequestURI();
if (requestURI.endsWith(".jsp") || requestURI.endsWith(".jspa")) {
// 如果请求的URI以.jsp或.jspa结尾,则检查用户是否已登录
if (httpRequest.getSession().getAttribute("loggedIn") != null) {
// 如果已登录,则继续处理请求
chain.doFilter(request, response);
} else {
// 如果未登录,则重定向到登录页面
httpResponse.sendRedirect("/login.jsp");
}
} else {
// 如果请求的URI不以.jsp或.jspa结尾,则继续处理请求
chain.doFilter(request, response);
}
}
public void destroy() {
// 清理操作
}
}
二、在web.xml文件中配置过滤器。在元素内添加以下代码:
<filter>
<filter-name>LoginFilter</filter-name>
<filter-class>com.example.LoginFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>LoginFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
上面的例子创建了一个名为LoginFilter的过滤器,并将其映射到所有URL模式。这意味着所有请求都会经过该过滤器。
三、 在登录页面中,检查用户是否已登录。如果已登录,将loggedIn属性添加到会话中,以便在过滤器中检查。
例如在判断登录成功的LoginServlet中添加以下语句:
request.getSession().setAttribute("loggedIn", true);
通过以上步骤就能阻止未登录的用户直接通过路径非法访问JSP页面了!