Servlet登录与不登录拆分

来源:互联网 发布:电陶炉 知乎 编辑:程序博客网 时间:2024/05/29 19:45
web.xml:   <filter>        <filter-name>LoginFilter</filter-name>        <filter-class>com.lxj.filter.LoginFilter</filter-class>        <init-param>            <param-name>noLoginPaths</param-name>            <param-value>login.jsp;fail.jsp;LoginServlet</param-value>        </init-param>    </filter>    <filter-mapping>        <filter-name>LoginFilter</filter-name>        <url-pattern>/*</url-pattern>    </filter-mapping>servlet:package com.lxj.servlet;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;import java.io.IOException;import java.io.PrintWriter;@WebServlet("/LoginServlet")public class LoginServlet extends HttpServlet {    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        String username = request.getParameter("username").trim();        String password = request.getParameter("password").trim();        if("admin".equals(username) && "admin".equals(password)){            HttpSession session = request.getSession();            session.setAttribute("username",username);            request.getRequestDispatcher("success.jsp").forward(request,response);        }else{            response.sendRedirect(request.getContextPath() + "/fail.jsp");        }    }}filter:    package com.lxj.filter;import javax.servlet.*;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;import java.io.IOException;public class LoginFilter implements Filter{    private FilterConfig config;    @Override    public void init(FilterConfig filterConfig) throws ServletException {        this.config = filterConfig;    }    @Override    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {        HttpServletRequest request = (HttpServletRequest)servletRequest;        String str = this.config.getInitParameter("noLoginPaths");        if(str != null){            String curUri = request.getRequestURI();            String[] strArr = str.split(";");            for(String s : strArr){                System.out.println(s);                if(s==null || s==""){                    continue;                }                if(curUri.indexOf(s) != -1){                    filterChain.doFilter(servletRequest,servletResponse);                    return;                }            }        }        HttpSession session = request.getSession();        if(session.getAttribute("username") != null){            filterChain.doFilter(servletRequest,servletResponse);        }else{            HttpServletResponse response = (HttpServletResponse)servletResponse;            response.sendRedirect(request.getContextPath()+"/login.jsp");        }    }    @Override    public void destroy() {    }}login.jsp: <form action="<%=request.getContextPath()%>/LoginServlet" method="post">      <input type="text" name="username" value=""/><br />      <input type="password" name="password" value="" /><br />      <input type="checkbox" name="flag" />      <button name="submit">登录</button>  </form>success.jsp:       登录成功,欢迎您<%=session.getAttribute("username")%>fail.jsp: 登录失败,请检查用户名或者密码