1、“登录过滤器”用途:
1)防止在用户未登录的情况下来访问网站。
2)举例:fire.html 这个网页是登录后才可以访问的,现在用户没有登录,直接可以访问fire.html。那么,这样的网站就存在安全问题?用户不用登录的情况下随随便便就访问。为了避免这样的情况,我们需要用过滤器来过滤一些需要登录后才可以访问的页面,可以理解为在门上加了一把锁。
2、实现操作:
1)简单一点,可以认定除了登录,注册页面,都需要过滤
2)判断用户有没有登录,已session为依据,来判断用户是否已登录。已登录,可以继续访问,没有登录返回到登录界面。
具体代码如下:
(1)LoginFilter.java
package com.filter;import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class LoginFilter implements Filter{
public void destroy() {
// TODO Auto-generated method stub
}
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,
FilterChain filterChain) throws IOException, ServletException {
HttpServletResponse response=(HttpServletResponse)servletResponse;
HttpServletRequest request=(HttpServletRequest)servletRequest;
HttpSession session=request.getSession();
Object object=session.getAttribute("currentUser");//获取session中作为判断的字段
String path=request.getServletPath(); //获取路径 request.getServletPath()返回:/main/list.jsp
// String path = req.getRequestURI();// 获得用户请求的URI, request.getRequestURI() 返回:项目名/main/list.jsp
if(object==null&&path.indexOf("login")<0){
//判断请求的 路径中是否包含了 登录页面的请求
//如果包含了,那么不过滤 继续执行操作
//如果不是login.jsp进行过滤
response.sendRedirect("forlogin.jsp");
}else{
filterChain.doFilter(servletRequest, servletResponse); // 已经登陆,继续此次请求
}
}
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
}
(2)web.xml
<filter>
<filter-name>loginFilter</filter-name>
<filter-class>com.filter.LoginFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>loginFilter</filter-name>
<url-pattern>/*</url-pattern>
<!-- <url-pattern>/*</url-pattern> 表示所有文件都需要过滤
也可以写为--<url-pattern>/admin/*</url-pattern>这里的/admin/* 表示是指定路径下的文件需要过滤 >
</filter-mapping>