filter过滤器登录验证
filter过滤器登录验证
1.新建一个FirstFilter类代码如下:
package com.ask.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./*自定义一个java类实现filter接口*/ public class FirstFilter implements Filter { //通过file配置文件中修改编码方式; private FilterConfig config; public FirstFilter(){ System.out.println("FirstFilter: "+this.hashCode()); } public void init(FilterConfig arg0) throws ServletException { config=arg0; System.out.println("init: "+this.hashCode()); } public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { String utf8=config.getInitParameter("utf-8"); HttpServletResponse resp=(HttpServletResponse) res; //resp.setContentType("text/html;charset=utf-8"); resp.setContentType("text/html;charset="+utf8); //调用下一个filter或者是web资源 chain.doFilter(req, res); } public void destroy() { System.out.println("destroy: "+this.hashCode()); } }
2.新建一个LoginFilter类代码如下:
package com.ask.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.import javax.servlet.import javax.servlet.public class LoginFilter implements Filter { public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain chain) throws IOException, ServletException { HttpServletRequest req=(HttpServletRequest) arg0; HttpServletResponse res=(HttpServletResponse) arg1; //获取资源路径; String uri=req.getRequestURI(); //获得jsp文件名; String action=uri.substring(uri.lastIndexOf("/")+1, uri.indexOf(".")); System.out.println(action); if ("login".equals(action)&&uri.endsWith(".jsp")) {//判断是否是longin.jsp请求 chain.doFilter(req, res); }else{//main.jsp longin.do if ("login".equals(action)) {//如果是login.do请求 HttpSession session=req.getSession(); if (session.getAttribute("name")==null) { String name=req.getParameter("username"); String pwd=req.getParameter("password"); if ("tom".equals(name)&&"123".equals(pwd)) { session.setAttribute("name", name); chain.doFilter(req, res); }else{ res.sendRedirect(req.getContextPath()+"/login.jsp"); } } }else{ HttpSession session=req.getSession(false); if (session.getAttribute("name")==null) { res.sendRedirect(req.getContextPath()+"/login.jsp"); }else{ chain.doFilter(req, res); } } } } public void init(FilterConfig arg0) throws ServletException { // TODO Auto-generated method stub } public void destroy() { // TODO Auto-generated method stub } }
3.新建一个SecFilter类,代码如下:
package com.ask.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; public class SecFilter implements Filter { public void destroy() { System.out.println("sec---destroy"); } public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { chain.doFilter(req, res); } public void init(FilterConfig arg0) throws ServletException { System.out.println("sec---init"); } }
4.新建一个showServlet类代码如下:
package com.ask.servlet; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.import javax.servlet.import javax.servlet.import javax.servlet.public class showServlet extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { String name=req.getParameter("username"); System.out.println("service"); res.getWriter().write("演示servlet中的filter过滤器"); HttpSession session=req.getSession(); session.setAttribute("name", name); System.out.println("登录成功"); res.sendRedirect(req.getContextPath()+"/main.jsp"); } }
5.在WebRoot目录下新建两个jsp文件,分别是login.jsp和main.jsp文件
Login.jsp如下
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>