Servlet--实现免登陆功能
用Filter方式实现用户登录功能,具体要求:
1:包含图片验证码
2.自动免登录
3.退出,退出时自动免登录失效
4.采用过滤器处理中文乱码
MainServlet
import javax.servlet.*; import javax.servlet.annotation.WebServlet; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.io.IOException; import java.io.PrintWriter; @WebServlet(value = "/main") public class MainServlet implements Servlet { @Override public void init(ServletConfig servletConfig) throws ServletException { } @Override public ServletConfig getServletConfig() { return null; } @Override public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { servletResponse.setContentType("text/html;charset=utf-8"); HttpServletRequest request = (HttpServletRequest)servletRequest; HttpServletResponse response =(HttpServletResponse) servletResponse; RequestDispatcher disp = request.getRequestDispatcher("/WEB-INF/main.jsp"); disp.forward(request,response); } @Override public String getServletInfo() { return null; } @Override public void destroy() { } }
LoginServlet
import javax.servlet.*; import javax.servlet.http.*; import javax.servlet.annotation.*; import java.io.IOException; import java.sql.SQLException; @WebServlet(name = "LoginServlet", value = "/login") public class loginServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request,response); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); response.setContentType("text/html;utf-8"); String username = request.getParameter("username"); String password = request.getParameter("password"); String[] values = request.getParameterValues("saved"); if(values[0]!=null){ Cookie ck1 = new Cookie("name",username); Cookie ck2 = new Cookie("pwd",password); ck1.setMaxAge(10000); ck2.setMaxAge(10000); response.addCookie(ck1); response.addCookie(ck2); } String in_code = request.getParameter("code"); //"" null HttpSession session = request.getSession(); String gen_code = (String) session.getAttribute("code"); UserDao userDao = new UserDao(); User user= null; try { user = userDao.findByname(username); } catch (SQLException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } if(user!=null&&user.getPassword().equals(password)){ session.setAttribute("user",user); RequestDispatcher disp = request.getRequestDispatcher("/main"); disp.forward(request,response); } else{ response.sendRedirect("login.jsp"); /* RequestDispatcher disp = request.getRequestDispatcher("/login.jsp"); disp.forward(request,response);*/ } } }
User
public class User { private String username; private String password; public User() { } public User(String username, String password) { this.username = username; this.password = password; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } @Override public String toString() { return "User{" + "username='" + username + '\'' + ", password='" + password + '\'' + '}'; } }
UserDao
import java.sql.Connection; import java.sql.*; public class UserDao { public static User findByname(String username) throws SQLException, ClassNotFoundException { User user=null; //1.加载驱动 Class.forName("com.mysql.jdbc.Driver"); String userName = "root"; String passWord = "123456"; String url = "jdbc:mysql://localhost:3306/sys?serverTimezone=UTC"; Connection connection = null; connection = DriverManager.getConnection(url, userName, passWord); PreparedStatement pps=connection.prepareStatement("select * from student where username=? "); pps.setString(1,username); ResultSet rst=pps.executeQuery(); if(rst.next()){ user=new User(); String password=rst.getString("password"); user.setUsername(username); user.setPassword(password); } return user; } }
AuthorizeFilter
import com.example.tomcat1234.User; import com.example.tomcat1234.UserDao; import javax.servlet.*; import javax.servlet.annotation.WebFilter; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.io.IOException; import java.sql.SQLException; @WebFilter(urlPatterns= {"/main","/hello-servlet"}) public class AuthorizeFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { servletResponse.setContentType("text/html;charset=utf-8"); HttpServletRequest request = (HttpServletRequest)servletRequest; HttpServletResponse response =(HttpServletResponse) servletResponse; HttpSession session = request.getSession(); User user =(User) session.getAttribute("user"); if(user==null){ Cookie[] cookies =request.getCookies(); String username=null; String password = null; for(Cookie ck:cookies){ if("name".equals(ck.getName())) username=ck.getValue(); if("pwd".equals(ck.getName())) password = ck.getValue(); } if(username!=null&&password!=null) {//自动登录 UserDao userDao = new UserDao(); try { user = userDao.findByname(username); } catch (SQLException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } if (user != null && user.getPassword().equals(password)) { session.setAttribute("user", user); filterChain.doFilter(request,response); }else{//cookie的登录信息不合法 RequestDispatcher disp = request.getRequestDispatcher("/login.jsp"); disp.forward(request,response); } }else{ RequestDispatcher disp = request.getRequestDispatcher("/login.jsp"); disp.forward(request,response); } }else { // Hello filterChain.doFilter(request,response); } } @Override public void destroy() { } }
Login.jsp
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>登录</title> </head> <body> <form action="login" method="post"> <%-- <%=request.getParameter("username")%><br/>--%> <%@ page contentType="text/html; ISO-8859-1" pageEncoding="UTF-8" %> 用户名:<input type="text" name="username"><br/> 密码:<input type="password" name="password"><br/> <input type="text" name="code"><img src="CodeServlet"><br/> <input type="checkbox" name="saved" checked>免登录 <input type="file" name="headImg" multiple="multiple" /><br/> <input type="submit"> <input type="reset"> </form> <%-- <a>选择头像</a><br/>--%> <%-- <form action="<%=request.getContextPath()%>/upload" method="post" enctype="multipart/form-data">--%> <%-- <input type="file" name="file" />--%> <%-- <input type="submit" />--%> <%-- </form>--%> <%-- <img src="<%=request.getContextPath() %>/images/1223.jpg" />--%> </body> </html>