1.先写一个类实现Filter接口
实现里面的doFile方法,
-->获取Session,判断session是否有值,
-->如果有,调用chain.doFilter(request, response);
-->如果没有,重定向到用户登录页面.
具体代码如下
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { //得到HttpServletRequest对象 HttpServletRequest requ=(HttpServletRequest) request; //获取session中的值 String username = (String) requ.getSession().getAttribute("username"); //判断session中是否有值 if(username!=null){ //如果有值,则继续执行 chain.doFilter(request, response); }else{ //如果没有值,那麽重定向到登录页面 HttpServletResponse respon=(HttpServletResponse) response;//得到HttpServletResponse对象 respon.sendRedirect("/loginFilter/login.jsp"); } }
2.建一个Servlet类继承自HttpServlet
-->重写service方法
-->获取到JSP页面传过来的username
-->将获取的username设置到session中
具体代码如下:
public class LoginServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //获取JSP传过来的username String username= request.getParameter("username"); //判断username是否为空 if(username!=null){ //username不为空,将username设置在session中 request.getSession().setAttribute("username", username); request.getRequestDispatcher("/WEB-INF/views/mainpage.jsp").forward(request, response); } } }
3.web.xml中的配置
<filter> <filter-name>UserInfoFilter</filter-name> <!-- 具体写过滤器的类的全限定名称--> <filter-class>com.gxxy.filter.UserInfoFilter</filter-class> </filter> <filter-mapping> <filter-name>UserInfoFilter</filter-name> <!-- 可以配置多个url-pattern --> <url-pattern>/user/*</url-pattern> <url-pattern>/user/hello</url-pattern> </filter-mapping>
注意:有的时候,我们并不想过滤所有的请求,比如用户登录页面并不需要过滤,所以我们在配置servlet时,注释就可以这么写
@WebServlet("/login")//登录服务器 @WebServlet("/user/shopcart")//购物车服务器 @WebServlet("/user/userInfo")//用户信息服务器
我们只需要过滤/user/*即可