java-Automatic login and remember user name

Source: Internet
Author: User

Step Analysis:

Step analysis: 1. Databases and tables CREATE DATABASE Day16;use day16;create table user (ID int primary KEY auto_increment,username varchar (20), password varchar); INSERT into user values (null, ' Tom ', ' 123 '); 2.web Project jar Package Tool class configuration file 3. Create a new login page Form 4. Form submission Loginservlet accept the user name and password call service to complete the login operation, the return value user determines whether the user is empty if not empty, the user into the session to determine whether to check the automatic login if checked: User name and password need to be written back to browser 5. The next time you visit the website, the filter intercepts any request to determine if there is a cookie with the specified cookie, gets the username and password to call the service to complete the login operation, Returns the user to the session when user is not empty. When we switch to Jack to log in, we find that login is not automatic login only need to log in once: when there is no user in the session to access some resources do not need to automatically login (and login and registration related resources) To modify the filter's logic: first determine if there is a user in the session and access the path is not associated with the login registration to obtain the specified cookie

Project structure:


Project Showcase:

Database:

/*sqlyog Ultimate v12.09 (+ bit) mysql-5.5.53:database-autologin************************************************** *!40101 set NAMES UTF8 */;/*!40101 set sql_mode= ' */;/*!40014 set @[email protected] @UNIQUE _checks, unique_checks=0 */;/*!40014 SET @[email protected] @FOREIGN_KEY_CHECKS, foreign_key_checks=0 */;/*! 40101 set @[email protected] @SQL_MODE, sql_mode= ' No_auto_value_on_zero ' */;/*!40111 set @[email protected] @SQL_NOTES, sql_notes=0 * *; CREATE DATABASE/*!32312 IF not exists*/' autologin '/*!40100 DEFAULT CHARACTER SET UTF8 */; Use ' autologin ',/*table structure for table ' user ' */drop table IF EXISTS ' user '; CREATE TABLE ' user ' (' id ' int (one) ' NOT NULL auto_increment COMMENT ' primary key ', ' username ' varchar (255) DEFAULT NULL COMMENT ' with User name ', ' password ' varchar (255) Default NULL COMMENT ' password ', PRIMARY KEY (' id ')) engine=innodb auto_increment=3 default CHARS Et=utf8;/*data for the table ' user ' */insert to ' user ' (' id ', ' username ', ' password ') valueS (1, ' Tom ', ' 123 '), (2, ' Jack ', ' 123 ');/*!40101 set [Email protected]_sql_mode */;/*!40014 set [email  Protected]_foreign_key_checks */;/*!40014 Set [email protected]_unique_checks */;/*!40111 set [email  Protected]_sql_notes * *;

Project Code:

Com.gordon.constant:

--

Package Com.gordon.constant;public class Constant {/** * is automatically signed in */public static String Is_auto_login = "OK";/** * Remember user name */public static String Is_remember_user = "OK";}

Com.gordon.dao:

--userdao.java:

Package Com.gordon.dao;import Java.sql.sqlexception;import Org.apache.commons.dbutils.queryrunner;import Org.apache.commons.dbutils.handlers.beanhandler;import Com.gordon.domain.user;import Com.gordon.utils.datasourceutil;public class Userdao {/** * User login *  * @param username * @param password * @return * @th Rows SQLException  */public User Login (string username, string password) throws SQLException {queryrunner qr = new Quer Yrunner (Datasourceutil.getdatasource ()); String sql = "SELECT * from user where username =?" and password =? Limit 1 "; return qr.query (SQL, New beanhandler<user> (User.class), username, password);}}

Com.gordon.domain:

--user.java:

Package Com.gordon.domain;public class User {private int id;private string Username;private string Password;public User () {}public User (int ID, string username, string password) {this.id = Id;this.username = Username;this.password = password;} public int getId () {return ID;} public void setId (int id) {this.id = ID;} 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;}}

Com.gordon.service:

--userservice.java:

Package Com.gordon.service;import Java.sql.sqlexception;import Com.gordon.dao.userdao;import Com.gordon.domain.user;public class UserService {/** * User login * @param username * @param password * @return * @throws Sqlexc Eption  */public User Login (string username, string password) throws SQLException {return new Userdao (). Login ( Username, password);}}

Com.gordon.utils:

--cookieutil.java

Package Com.gordon.utils;import Javax.servlet.http.cookie;import Javax.servlet.http.httpservletrequest;import  javax.servlet.http.httpservletresponse;/** * Cookie Tool class * */public class Cookieutil {/** * Add cookie * * @param response * @param name * @param value * @param maxAge */public static void Addcookie (HttpServletResponse response, String name, Stri Ng value) {Cookie cookie = new Cookie (name, value); Cookie.setpath ("/"); Response.addcookie (cookie);} /** * Add Cookie * * @param response * @param name * @param value * @param maxAge */public static void Addcookie (Httpservle  Tresponse response, String name, string value, int maxAge) {Cookie cookie = new Cookie (name, value); Cookie.setpath ("/"); if (MaxAge > 0) {cookie.setmaxage (maxAge);} Response.addcookie (cookie);} /** * Delete Cookie * * @param response * @param name */public static void Removecookie (HttpServletResponse response, String n AME) {Cookie UID = new Cookie (name, null); Uid.setpath ("/"); uid.setmaxage (0); Response.addcookie (UID);} /** * GetCookie value * * @param request * @return */public static string Getuid (HttpServletRequest request, string cookiename) {cookie Cookies[] = Request.getcookies (); for (Cookie cookie:cookies) {if (Cookie.getname (). Equals (CookieName)) {return Cookie. GetValue ();}} return null;}}

--datasourceutil.java:

Package Com.gordon.utils;import Java.sql.connection;import Java.sql.resultset;import java.sql.sqlexception;import Java.sql.statement;import Javax.sql.datasource;import Com.mchange.v2.c3p0.combopooleddatasource;public Class Datasourceutil {private static Combopooleddatasource ds = new Combopooleddatasource ();/** * Get Data source * * @return Connection Pool */publi C Static DataSource Getdatasource () {return DS;} /** * Get Connection * * @return connection * @throws SQLException */public static Connection getconnection () throws SQLException {return D S.getconnection ();} /** * FREE Resources * * @param conn * connection * @param ST * Statement Performer * @param RS * result set */public static VO ID Closeresource (Connection conn, Statement St, ResultSet rs) {closeresultset (RS); closestatement (ST); CLOSECONN (conn);} /** * Release Connection * * @param conn * connection */public static void Closeconn (Connection conn) {if (conn! = null) {try {conn. Close ();} catch (SQLException e) {e.printstacktrace ();} conn = null;}}     /** * Release Statement performer * * @param St *       Statement performer */public static void Closestatement (Statement st) {if (st! = null) {try {st.close ();} catch (SQLException e) {E.printstacktrace ();} st = NULL;}} /** * Release Result set * * @param RS * result set */public static void Closeresultset (ResultSet rs) {if (rs! = null) {try {rs.cl OSE ();} catch (SQLException e) {e.printstacktrace ();} rs = null;}}}

Com.gordon.web.filter:

--autologinfilter.java

Package Com.gordon.web.filter;import Java.io.ioexception;import Java.net.urldecoder;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.annotation.WebFilter; Import Javax.servlet.http.httpservletrequest;import Javax.servlet.http.httpservletresponse;import Com.gordon.domain.user;import com.gordon.service.userservice;import com.gordon.utils.cookieutil;/** * Automatic login filter */@ Webfilter (Urlpatterns = {"/*"}) public class Autologinfilter implements Filter {public autologinfilter () {}public void de Stroy () {}public void DoFilter (ServletRequest request, servletresponse response, Filterchain chain) throws IOException, servletexception {HttpServletRequest req = (httpservletrequest) request; HttpServletResponse resp = (httpservletresponse) response;//to determine if the user is logged in, if there is no user, then not logged in, start automatic login if (req.getsession (). GetAttribute ("user") = = null){//To determine if there is Cookieif (Cookieutil.getuid (req, "autologin") = null) {//excludes the specified path (the specified path does not require automatic login, such as login request, registration request) if (! Req.getservletpath (). Contains ("/login")) {System.out.println ("Perform automatic logon operation ...");//Get the username password in the cookie string Usercookievalue = Cookieutil.getuid (req, "autologin"); String username = usercookievalue.split ("-") [0]; String Password = usercookievalue.split ("-") [1];  User User = null;try {user = new UserService (). Login (Urldecoder.decode (username, "UTF-8"), password);} catch (Exception e) {E.printstacktrace ();} if (user! = null) {//Put the user into sessionreq.getsession (). SetAttribute ("user", user);//directly into the Success page, do not need to automatically transfer Resp.sendredirect ( Req.getcontextpath () + "/");}}} Chain.dofilter (request, response);} public void init (Filterconfig fconfig) throws servletexception {}}

Com.gordon.web.servlet:

--loginservlet.java

Package Com.gordon.web.servlet;import Java.io.ioexception;import Java.net.urlencoder;import java.sql.SQLException; 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 Com.gordon.constant.constant;import Com.gordon.domain.User;import Com.gordon.service.userservice;import com.gordon.utils.cookieutil;/** * User Login */@WebServlet ("/login") public class  Loginservlet extends HttpServlet {private static final long serialversionuid = 1l;protected void Doget (httpservletrequest Request, HttpServletResponse response) throws Servletexception, IOException {request.setcharacterencoding ("utf-8"); String username = request.getparameter ("username"); String Password = request.getparameter ("password"); String autologin = Request.getparameter ("Autologin"); String Rememberuser = Request.getparameter ("Rememberuser"); User User = null;try {user = new UserserVice (). login (username, password);} catch (SQLException e) {e.printstacktrace ();} if (user! = null) {//puts the user into sessionrequest.getsession (). SetAttribute ("user", user);//If you turn on remember user name, save the username Cookieif ( Rememberuser! = null && Constant.IS_REMEMBER_USER.equals (Rememberuser)) {// Remember user name cookie storage 60 days Cookieutil.addcookie (response, "Rememberuser", Urlencoder.encode (User.getusername (), "UTF-8"), 60 * 24 * 3600);} If automatic login is turned on, the user is credited to Cookieif (autologin! = null && Constant.IS_AUTO_LOGIN.equals (autologin)) {// Automatic login cookie Storage 30 days Cookieutil.addcookie (response, "Autologin", Urlencoder.encode (User.getusername (), "UTF-8") + "-" + User.getpassword (), 30 * 24 * 3600);}} Response.sendredirect (Request.getcontextpath () + "/");} protected void DoPost (HttpServletRequest request, httpservletresponse response) throws Servletexception, IOException { Doget (request, Response);}}

--logoutservlet.java

Package Com.gordon.web.servlet;import Java.io.ioexception;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 com.gordon.utils.cookieutil;/** * User Login */@WebServlet ("/logout") public class Logoutservlet extends HttpServlet {private Static final Long serialversionuid = 1l;protected void doget (HttpServletRequest request, httpservletresponse response) Throws Servletexception, IOException {request.getsession (). RemoveAttribute ("user"); Cookieutil.removecookie (Response, "autologin"); Response.sendredirect (Request.getcontextpath () + "/");} protected void DoPost (HttpServletRequest request, httpservletresponse response) throws Servletexception, IOException { Doget (request, Response);}}

C3p0-config.xml:

<c3p0-config><!--Default configuration, use this configuration if not specified--><default-config><!--basic configuration--><property name= " Driverclass ">com.mysql.jdbc.driver</property><property name=" Jdbcurl ">jdbc:mysql://localhost : 3306/autologin</property><property name= "user" >root</property><property name= "password" >root</property><!--Extended configuration--><property name= "Checkouttimeout" >30000</property>< Property Name= "Idleconnectiontestperiod" >30</property><property name= "Initialpoolsize" >10</ Property><property name= "MaxIdleTime" >30</property><property name= "MaxPoolSize" >100</ Property><property name= "minpoolsize" >10</property><property name= "maxStatements" >200</ Property></default-config> <!--named configuration--><named-config name= "Itcast" ><property name= " Driverclass ">com.mysql.jdbc.driver</property><property name=" Jdbcurl ">jdbc:mysql:// 127.0.0.1:3306/xxxx</propeRty><property name= "user" >root</property><property name= "password" >1234</property> <!--how many--><property name= "acquireincrement" >5</property><property name= if the pool does not have enough data to connect to it at a time Initialpoolsize ">20</property><property name=" minpoolsize ">10</property><property name=" Maxpoolsize ">40</property><property name=" maxstatements ">20</property><property name="  Maxstatementsperconnection ">5</property></named-config></c3p0-config>

-----------------------------------------------------

index.jsp

<%@ page language= "java" contenttype= "text/html; Charset=utf-8 "pageencoding=" UTF-8 "%><% @taglib prefix=" C "uri=" Http://java.sun.com/jsp/jstl/core "%><! DOCTYPE HTML PUBLIC "-//w3c//dtd HTML 4.01 transitional//en" "Http://www.w3.org/TR/html4/loose.dtd" >

login.jsp

<%@ page language= "java" contenttype= "text/html; Charset=utf-8 "pageencoding=" UTF-8 "%><! DOCTYPE HTML PUBLIC "-//w3c//dtd HTML 4.01 transitional//en" "Http://www.w3.org/TR/html4/loose.dtd" >

show_product.jsp

<%@ page language= "java" contenttype= "text/html; Charset=utf-8 "pageencoding=" UTF-8 "%><! DOCTYPE HTML PUBLIC "-//w3c//dtd HTML 4.01 transitional//en" "Http://www.w3.org/TR/html4/loose.dtd" >

java-Automatic login and remember user name

Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.