項目總體目錄以下:
用戶表結構
mysql數據庫配置前端
user實體類java
package com.example.system.entity; import java.util.Date; /** * 用戶信息對象 * @author xutao * 建立時間:2020-12-8 上午13:59:23 */public class sysUser{ public int id;//id public String username;//用戶名 public String loginname;//登陸帳號 public String password;//密碼 public int areaid;//區域編碼 public int orgid;//機構id public String sex;//性別 public String email;//郵箱 public int phone;//手機號碼 public String ipaddress;//IP地址 public int errorcount;//錯誤計數 public Date lastlogintime;//上次登陸時間 public Date passwdinvaltime;//密碼失效時間 public Date locktime;//鎖定時間 public int delflag;//刪除標識 public Date createtime;//建立時間 public String createuser;//建立用戶 public Date updatetime;//更新時間 public String updateuser;//更新用戶 public int groupid;//組別id public int roleid;//角色id 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 getLoginname() { return loginname; } public void setLoginname(String loginname) { this.loginname = loginname; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public int getAreaid() { return areaid; } public void setAreaid(int areaid) { this.areaid = areaid; } public int getOrgid() { return orgid; } public void setOrgid(int orgid) { this.orgid = orgid; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public int getPhone() { return phone; } public void setPhone(int phone) { this.phone = phone; } public String getIpaddress() { return ipaddress; } public void setIpaddress(String ipaddress) { this.ipaddress = ipaddress; } public int getErrorcount() { return errorcount; } public void setErrorcount(int errorcount) { this.errorcount = errorcount; } public Date getLastlogintime() { return lastlogintime; } public void setLastlogintime(Date lastlogintime) { this.lastlogintime = lastlogintime; } public Date getPasswdinvaltime() { return passwdinvaltime; } public void setPasswdinvaltime(Date passwdinvaltime) { this.passwdinvaltime = passwdinvaltime; } public Date getLocktime() { return locktime; } public void setLocktime(Date locktime) { this.locktime = locktime; } public int getDelflag() { return delflag; } public void setDelflag(int delflag) { this.delflag = delflag; } public Date getCreatetime() { return createtime; } public void setCreatetime(Date createtime) { this.createtime = createtime; } public String getCreateuser() { return createuser; } public void setCreateuser(String createuser) { this.createuser = createuser; } public Date getUpdatetime() { return updatetime; } public void setUpdatetime(Date updatetime) { this.updatetime = updatetime; } public String getUpdateuser() { return updateuser; } public void setUpdateuser(String updateuser) { this.updateuser = updateuser; } public int getGroupid() { return groupid; } public void setGroupid(int groupid) { this.groupid = groupid; } public int getRoleid() { return roleid; } public void setRoleid(int roleid) { this.roleid = roleid; } }
持久層接口daomysql
package com.example.system.dao; import com.example.system.entity.sysUser; /** * 登陸功能dao接口 * @author lmwang * 建立時間:2020-12-9 下午16:53:20 */ public interface loginDao { //登陸驗證帳號密碼 public Object login(String loginName,String password); //首次登陸強制修改密碼/重置密碼(管理員權限) public void updatePd(int id,String password); //登陸成功後獲取用戶惟一id public Object queryById(String loginName); //經過惟一id獲取用戶對象 public sysUser userById(int id); //用戶修改我的信息 public void updateSysUser(sysUser user); }
dao映射層daoimpl,繼承dao接口web
package com.example.system.dao.impl; import com.example.system.dao.loginDao; import com.example.system.entity.sysUser; import com.example.system.util.JdbcDaoSupport4mysql; import com.example.system.util.MysqlDb; import org.springframework.dao.DataAccessException; import org.springframework.jdbc.core.ResultSetExtractor; import org.springframework.stereotype.Repository; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; @MysqlDb @Repository public class loginDaoImpl extends JdbcDaoSupport4mysql implements loginDao { @Override public Object login(String loginName, String password) { String sql="select password from sys_user where login_name='"+loginName+"'"; ArrayList<Object> paralist = new ArrayList<Object>(); return this.queryForList(sql,paralist); } @Override public Object queryById(String loginName) { String sql="select id from sys_user where login_name='"+loginName+"'"; ArrayList<Object> paralist = new ArrayList<Object>(); return this.queryForList(sql,paralist); } //密碼修改與重置 @Override public void updatePd(int id,String password) { String sql="update sys_user set password='"+password+"' where id='"+id+"'"; this.getJdbcTemplate().update(sql, new Object[]{id,password}); } @Override public void updateSysUser(sysUser user) { if(null!=user){ String sql="update sys_user set 1=1"; if(null!=user.getLoginname()){ } if(0!=user.areaid){ sql+=",area_id= "+user.areaid; } if(null!=user.getSex()){ sql=",sex='"+user.getSex()+"' "; } if(null!=user.getEmail()){ sql=",email='"+user.getEmail()+"' "; } if(null!=user.getIpaddress()){ sql=",ip_address='"+user.getIpaddress()+"'"; } sql+= " where loginName='"+user.getLoginname()+"' where id="+user.getId(); this.getJdbcTemplate().update(sql,new Object[]{user}); } } @Override public sysUser userById(int id) { String sql="select id,username,login_name,password,area_id,org_id,sex,email," + "phone,ip_address,error_count,last_login_time,passwd_inval_time,lock_time," + "del_flag, create_time,create_user,update_time,update_user," + "group_id,role_id from sys_user where id='"+id+"'"; return this.getJdbcTemplate().query(sql,new Object[]{id},new ResultSetExtractor<sysUser>(){ @Override public sysUser extractData(ResultSet rs) throws SQLException, DataAccessException { sysUser user = new sysUser(); while(rs.next()) { user.setId(rs.getInt("id")); user.setUsername(rs.getString("username")); user.setLoginname(rs.getString("login_name")); user.setPassword(rs.getString("password")); user.setAreaid(rs.getInt("area_id")); user.setOrgid(rs.getInt("org_id")); user.setSex(rs.getString("sex")); user.setEmail(rs.getString("email")); user.setPhone(rs.getInt("phone")); user.setIpaddress(rs.getString("ip_address")); user.setErrorcount(rs.getInt("error_count")); user.setLastlogintime(rs.getDate("last_login_time")); user.setPasswdinvaltime(rs.getDate("passwd_inval_time")); user.setLocktime(rs.getDate("lock_time")); user.setDelflag(rs.getInt("del_flag")); user.setCreatetime(rs.getDate("create_time")); user.setCreateuser(rs.getString("create_user")); user.setUpdatetime(rs.getDate("update_time")); user.setUpdateuser(rs.getString("update_user")); user.setGroupid(rs.getInt("group_id")); user.setRoleid(rs.getInt("role_id")); } return user; } }); } }
業務層servicespring
package com.example.system.service; import com.example.system.dao.loginDao; import com.example.system.dao.sysLoginLogDao; import com.example.system.entity.sysUser; import org.springframework.stereotype.Service; import javax.annotation.Resource; @Service public class loginService { @Resource private loginDao logindao; @Resource private sysLoginLogDao sysLoginLogDao; //登陸驗證 public boolean login(String loginName,String password){ Object pd= logindao.login(loginName,password); //密碼驗證 if(pd.equals(password)){ //登陸成功 return true; } return false; } //修改/重置密碼 public void updatePd(int id[],String password){ //password爲null時,默認爲重置標識reset,執行密碼重置操做 if(null==password){ password="000000"; } for (int i : id) { logindao.updatePd(i,password); } } //修改用戶信息 public void updateSysUser(sysUser user){ logindao.updateSysUser(user); } //經過惟一id獲取用戶詳情 public sysUser queryUser(int id){ return logindao.userById(id); } //查詢登陸用戶的惟一id public int queryUserById(String loginName){ return Integer.parseInt(logindao.queryById(loginName).toString()); } }
控制層controller,先後端分離開發,開放接口給前端調用sql
package com.example.system.controller; import com.example.system.entity.sysUser; import com.example.system.service.loginService; import com.example.system.util.jwtUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import java.util.HashMap; import java.util.Map; import java.util.UUID; /** * 登陸驗證及相關操做Controller */@RestController @RequestMapping(value="/system") public class LoginController { @Autowired private loginService loginService; //登陸頁 @RequestMapping(value="/getLoginPage.do") public String getLoginPage(){ return ""; } //輔控系統首頁 @RequestMapping(value="/getIndexPage.do") public String getIndexPage() { return ""; } /** *登陸驗證 */ @RequestMapping(value="/getLogin.do",method= RequestMethod.POST) @ResponseBody public Map getLogin(String loginName,String password){ Map map = new HashMap(); Boolean login=loginService.login(loginName,password); if(login==false){ //登陸信息驗證失敗 //返回驗證提示 map.put("flag",login);//登陸驗證標識 map.put("info","帳號密碼輸入有誤!"); return map; }else{ String token=null;//登陸令牌 String refreshToken=null;//刷新令牌 int id=loginService.queryUserById(loginName); try { token=jwtUtil.createToken(id+"",loginName); } catch (Exception e) { e.printStackTrace(); } //刷新token,免密登錄 refreshToken= UUID.randomUUID().toString().replaceAll("-",""); map.put("flag",login);//登陸驗證標識 map.put("time",86400);//1天=86400秒 map.put("token",token); map.put("refreshToken", refreshToken); return map; } } /** * 重置密碼(管理員權限) */ @RequestMapping(value="/reset.do",method= RequestMethod.POST) @ResponseBody public void Reset(int[] id){ loginService.updatePd(id,null); } /** * 修改密碼 */ @RequestMapping(value="/updatePd.do",method= RequestMethod.POST) @ResponseBody public void updatePd(int[] id,String password){ loginService.updatePd(id,password); } /** * 修改用戶信息 */ @RequestMapping(value="/updateInfo.do",method= RequestMethod.POST) @ResponseBody public void updatePersonInfo(sysUser user){ loginService.updateSysUser(user); } }
工具類
JdbcDaoSupport4mysql數據庫
package com.example.system.util; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.annotation.Resource; import com.example.system.entity.PageObj; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.RowMapper; import org.springframework.stereotype.Repository; /** * mysql dao的父類 * @author chen.kui * @date 2014年9月28日15:26:57 */@Repository public class JdbcDaoSupport4mysql{ @Resource private JdbcTemplate jdbcTemplate; /** * 爲當前的DAO返回 JdbcTemplate */ public final JdbcTemplate getJdbcTemplate() { return jdbcTemplate; } /** * sql執行 分頁 * 2015-12-2 */ public Map<String, Object> queryByPage(String sql, ArrayList<Object> paralist, PageObj pageObj){ Map<String, Object> modelMap = new HashMap<String, Object>(); List<Object> list =this.queryByPage(sql, new RowMapper<Object>(){ @Override public Object mapRow(ResultSet rs, int rowNum) throws SQLException { Map<String,String> row = new HashMap<String,String>(); ResultSetMetaData rowdata =rs.getMetaData(); for(int i = 1 ; i<= rowdata.getColumnCount() ; i++){ row.put(rowdata.getColumnLabel(i), rs.getObject(i)==null?"":String.valueOf(rs.getObject(i))); } return row; } },pageObj,paralist.toArray()); modelMap.put("pageObj", pageObj); modelMap.put("list", list); return modelMap; } /** * 通用查詢 返回list JSONObject對象 * @param sql * @param paralist * @return * 2015-12-2 */ public List<Object> queryForList(String sql,ArrayList<Object> paralist){ return this.getJdbcTemplate().query(sql, paralist.toArray(),new RowMapper<Object>(){ @Override public Object mapRow(ResultSet rs, int rowNum) throws SQLException { Map<String,String> row = new HashMap<String,String>(); ResultSetMetaData rowdata =rs.getMetaData(); for(int i = 1 ; i<= rowdata.getColumnCount() ; i++){ row.put(rowdata.getColumnLabel(i), rs.getObject(i)==null?"":String.valueOf(rs.getObject(i))); } return row; } }); } public List<Map<String, Object>> queryByPageForList(String sql, PageObj pageObj, Object... params) { int startIndex = (pageObj.getPage()-1) * pageObj.getRows(); pageObj.setTotal(this.getJdbcTemplate().queryForObject("SELECT COUNT(*) TOTAL FROM ("+sql+")PAGE_", params, Integer.class)); String pageSql = "SELECT PAGE_.* FROM("+sql+" )PAGE_ LIMIT "+startIndex+","+pageObj.getRows(); return this.jdbcTemplate.queryForList(pageSql, params); } public List<Map<String, Object>> queryByPageForList(String sql, PageObj pageObj) { int startIndex = (pageObj.getPage()-1) * pageObj.getRows(); pageObj.setTotal(this.getJdbcTemplate().queryForObject("SELECT COUNT(*) TOTAL FROM ("+sql+")PAGE_", Integer.class)); String pageSql = "SELECT PAGE_.* FROM("+sql+" )PAGE_ LIMIT "+startIndex+","+pageObj.getRows(); return this.jdbcTemplate.queryForList(pageSql); } /** * 通用的分頁查詢 * @param sql * @param rowMapper * @param pageObj * @return */ public <T> List<T> queryByPage(String sql, Object[] params, RowMapper<T> rowMapper, PageObj pageObj) { int startIndex = (pageObj.getPage()-1) * pageObj.getRows(); pageObj.setTotal(this.getJdbcTemplate().queryForObject("SELECT COUNT(*) TOTAL FROM ("+sql+") PAGE_", params, Integer.class)); String pageSql = "SELECT PAGE_.* FROM("+sql+" )PAGE_ LIMIT "+startIndex+","+pageObj.getRows(); return this.jdbcTemplate.query(pageSql, params, rowMapper); } /** * 通用的分頁查詢 * @param sql * @param params * @param rowMapper * @param pageObj * @return */ public <T> List<T> queryByPage(String sql, RowMapper<T> rowMapper, PageObj pageObj) { int startIndex = (pageObj.getPage()-1) * pageObj.getRows(); pageObj.setTotal(this.getJdbcTemplate().queryForObject("SELECT COUNT(*) TOTAL FROM ("+sql+")PAGE_", Integer.class)); String pageSql = "SELECT PAGE_.* FROM("+sql+" )PAGE_ LIMIT "+startIndex+","+pageObj.getRows(); return this.jdbcTemplate.query(pageSql, rowMapper); } public <T> List<T> queryByPage(String sql, RowMapper<T> rowMapper, PageObj pageObj, Object... params) { int startIndex = (pageObj.getPage()-1) * pageObj.getRows(); pageObj.setTotal(this.getJdbcTemplate().queryForObject("SELECT COUNT(*) TOTAL FROM ("+sql+")PAGE_",params, Integer.class)); String pageSql = "SELECT PAGE_.* FROM("+sql+" )PAGE_ LIMIT "+startIndex+","+pageObj.getRows(); return this.jdbcTemplate.query(pageSql, rowMapper,params); } }
MysqlDb後端
package com.example.system.util; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** * @Description 區別各數據庫的實現類的註解 * @author zhang.dechang * @date 2015年3月30日 上午10:06:00 * */ @Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface MysqlDb { String value() default ""; }