package sysone.zr.com.controller; import java.io.IOException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.util.StringUtils; import com.alibaba.fastjson.JSON; import com.google.gson.Gson; /** * * @author lf * */ public class BasicalController { /** * 獲取IP * @return */ public static String getIP(HttpServletRequest request){ String ip = request.getHeader("X-Forwarded-For"); if (!StringUtils.isEmpty(ip) && !"unKnown".equalsIgnoreCase(ip)) { //多次反向代理后會有多個ip值,第一個ip才是真實ip int index = ip.indexOf(","); if (index != -1) { return ip.substring(0,index); }else { return ip; } } ip = request.getHeader("X-Real-IP"); if (!StringUtils.isEmpty(ip) && !"unKnown".equalsIgnoreCase(ip)) { return ip; } return request.getRemoteAddr(); } /** * 輸出json數據(基於gson) * @param object * @param response */ public static void printOutByGson(Object object ,HttpServletResponse response){ response.setCharacterEncoding("UTF-8"); // 創建gson對象 Gson gson = new Gson(); String jsonstr = gson.toJson(object); try { response.getWriter().print(jsonstr); } catch (IOException e) { e.printStackTrace(); } } /** * 輸出json數據(基於阿里巴巴的jar實現的) * @param object * @param response */ public static void printOutByFast(Object object,HttpServletResponse response){ response.setCharacterEncoding("UTF-8"); String jsonStr = JSON.toJSONString(object); System.out.println(jsonStr); try { response.getWriter().print(jsonStr); } catch (IOException e) { e.printStackTrace(); } } }
package sysone.zr.com.controller; import java.util.HashMap; import java.util.Map; import java.util.regex.Pattern; import javax.enterprise.inject.New; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import sysone.zr.com.mapper.model.MessageTip; import sysone.zr.com.utils.Encrypt; import sysone.zr.com.utils.VerifyString; /** * * @author lf * */ @Controller public class LoginController extends BasicalController{ /** * 利用map取代去數據庫查詢 */ private static Map<String, String> info = new HashMap<String, String>(); private String regStr = "[a-zA-Z]{2,12}"; static{ info.put("username", "lf"); // info.put("password", "123456"); info.put("password", "750e65ebba95ab9493cda01e3eq*&@,.,`~S6@#>e388f02f"); } /** * 進入登錄頁面 * @return */ @RequestMapping("index.htm") public String comeToLoginPage(HttpServletRequest request){ System.out.println(super.getIP(request)); return "login"; } /** * 驗證登錄的合法性֤ * @param username * @param password * @param response */ @RequestMapping(value="login",method=RequestMethod.POST) public void login(@RequestParam(value="username",required=true,defaultValue="") String username, @RequestParam(value="password",required=true,defaultValue="") String password, HttpServletResponse response){ System.out.println("username:"+username+"\npassword:"+password); //判斷用戶名合法性 boolean isLegal = false; isLegal = VerifyString.validString(username, regStr); System.out.println(isLegal); if (!isLegal) { super.printOutByGson(new MessageTip("username is not valid"), response); return ; } // 加密 String newPwd = Encrypt.encrypt(password); System.out.println(newPwd); // 通過map去查詢(在此忽略了去數據查找的步驟) boolean isExisted = false; String usernameStr = info.get("username"); String pwd = info.get("password"); if (username.equals(usernameStr) && newPwd.equals(pwd)) { isExisted = true; } // 根據查找的結果返回相應的提示 String msg = isExisted == true ? "success" : "非法用戶名"; MessageTip tip = new MessageTip(msg); super.printOutByFast(tip, response); } /** * 進入歡迎頁面 * @return */ @RequestMapping("welcome.htm") public String comeToWelcomePage(){ return "welcome"; } /** * ע�� */ // @RequestMapping(value="regedit",method=RequestMethod.POST) // public void regedit(){ // // ��̨У����� // } /** * 進入注冊頁面 * @return */ @RequestMapping("regedit.htm") public String comeToRegeditPage(){ return "regedit"; } }
package sysone.zr.com.mapper.model; /** * * @author lf * */ public class MessageTip { private String tips; public String getTips() { return tips; } public void setTips(String tips) { this.tips = tips; } public MessageTip() { super(); } public MessageTip(String tips) { super(); this.tips = tips; } }
package sysone.zr.com.utils; import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; /** * 加密工具類 * @author lf * */ public class Encrypt { public static void main(String[] args) { System.out.println(encrypt("123456789")); } /** * 將字符串從中間一分為二,然后分開的字符串進行倒序排序后,在拼接在一起 * 如果字符串出現基數,中間的值保持不變,將剩下的字符串一分為二 * */ public static String encrypt(String str){ str = appendString(str); int num = str.length() % 2; String str1 = reverseString(str.substring(0, str.length()/2)); if (num==0) { String str2 = reverseString(str.substring(str.length()/2, str.length())); return str1+str2; }else { String str2 = reverseString(str.substring(str.length()/2+1, str.length())); return str1+str.substring(str.length()/2, str.length()/2+1)+str2; } } /** * 拼接字符串 * @param str * @return */ private static String appendString(String str){ String newStr = str+">#@6S~`,.,@&*qe3"; return newStr; } /** * ͨ遞歸將字符串倒序排序 * @param str * @return */ private static String reverseString(String str){ if (str.length()==1) { return str; }else{ // 截取最后一個字符 String lastStr = str.substring(str.length()-1, str.length()); String string =lastStr+ reverseString(str.substring(0, str.length()-1)); return string; } } }
package sysone.zr.com.utils; import java.util.regex.Pattern; /** * * @author apple * */ public class VerifyString { /** * 判斷是否匹配 * @param str * @param regStr * @return */ public static boolean validString(String str, String regStr){ Pattern pattern = Pattern.compile(regStr); return pattern.matcher(str).matches(); } }
package sysone.zr.com.utils; /** * * @author lf * */ public class VerifyUtil { //手機號 public static String mobile = "^((13[0-9])|(14[0-9])|(15[0-9])|(16[0-9])|(17[0-9])|(18[0-9])|(19[0-9]))\\d{8}$"; //空白 public static String blank = ".*[^ ].*"; //郵箱 public static String email = "^([a-z0-9A-Z]+[-|_|\\.]?)+[a-z0-9A-Z]@([0-9a-z_\\-]*)(\\.(com|cn|inc|org|cc|edu|de)*){1,2}([a-z]{2})?$"; //QQ號 public static String tencentQQ = "[1-9][0-9]{4,11}"; //網址ַ public static String url = "(http|https)+://([\\w-]+\\.)+[\\w-]+(/[\\w- ./?%&=]*)?"; //微信號 public static String weixin = "^[A-Za-z0-9]\\w{3,60}+$"; }
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd" > <!-- 包掃描 --> <context:component-scan base-package="sysone.zr" /> <aop:aspectj-autoproxy proxy-target-class="true" /> <!-- 開啟Springmvc注解驅動 --> <mvc:annotation-driven /> <!-- SpringMVC視圖解析器 --> <bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> <property name="prefix" value="/WEB-INF/jsp/"/> <property name="suffix" value=".jsp"/> </bean> <!-- 攔截器 --> <!-- <bean id="urlhandler" class="sysone.zr.com.interception.URLHandler"></bean> <mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/lf/online/**"/> <ref bean="urlhandler"/> </mvc:interceptor> </mvc:interceptors> --> </beans>
<%@ 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"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>登錄頁面</title> <script src="/resource/vendor/jquery/jquery-1.10.2.min.js"></script> <script src="/resource/vendor/bootstrap/js/bootstrap.min.js"></script> <link href="/resource/vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet" /> <script src="/resource/dist/js/bootstrapValidator.min.js"></script> <script src="/resource/md5/md5.js"></script> <link href="/resource/dist/css/bootstrapValidator.min.css" rel="stylesheet" /> </head> <body> <p> <br/> <center><h1 id="tip"></h1></center> <form id="logForm" class="form-horizontal" method="post" action="login.htm"> <div class="form-group"> <label class="col-lg-3 control-label">用戶名</label> <div class="col-lg-5"> <input id="username" type="text" class="form-control" name="username" /> </div> </div> <div class="form-group"> <label class="col-lg-3 control-label">密碼</label> <div class="col-lg-5"> <input id="password" type="password" class="form-control" name="password" placeholder="密碼是由6到12字符和數字組成(包括下划線和小圓點)"/> </div> </div> <div class="form-group"> <label class="col-lg-3 control-label"></label> <button type="submit" class="btn btn-info">提交</button> <a class="btn btn-info" href="regedit.htm">注冊</a> </div> </form> <script type="text/javascript"> $('#logForm').submit(function(){ //驗證 if(!$('#logForm').data('bootstrapValidator').isValid()){ return false; } var pwdInput = document.getElementsByName("password")[0]; var password = pwdInput.value; // 對密碼加密 var hash = hex_md5(password); pwdInput.value = hash; $.ajax({ url : 'login.htm', data : { "username" : $('#username').val(), "password" : $('#password').val(), }, type : 'post', dataType : 'text', success : function(data) { alert(data); var obj = eval('(' + data + ')'); var value = obj.tips; if(value != 'success'){ $('#tip').html(value); }else{ window.location.href='welcome.htm'; } }, error : function() { alert("提交出了點故障,您可以重新提交試試~"); } }); return false; }); $('#logForm').bootstrapValidator({ fields: { username: { message: 'The username is not valid', validators: { notEmpty: { message: '用戶名不能為空' }, stringLength: { min: 2, max: 12, message: '密碼長度必須在2到12個字母' }, regexp: { regexp: /^[a-zA-Z]{2,12}$/, message: '密碼是由2到12字符和數字組成(包括下划線和小圓點)' } } }, password: { message:'密碼無效', validators: { notEmpty: { message: '密碼不能為空' }, stringLength: { min: 6, max: 12, message: '密碼長度必須在6到12之間' }, regexp: { regexp: /^[a-zA-Z0-9_\.]+$/, message: '密碼是由6到12字符和數字組成(包括下划線和小圓點)' } } } } }); </script> </body> </html>
<%@ 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"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> <title>注冊頁面</title> <script src="/resource/vendor/jquery/jquery-1.10.2.min.js"></script> <script src="/resource/vendor/bootstrap/js/bootstrap.min.js"></script> <link href="/resource/vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet" /> <script src="/resource/dist/js/bootstrapValidator.min.js"></script> <script src="/resource/md5/md5.js"></script> <link href="/resource/dist/css/bootstrapValidator.min.css" rel="stylesheet" /> </head> <body> <form id="logForm" class="form-horizontal" method="post" action="login.htm"> <div class="form-group"> <label class="col-lg-3 control-label">用戶名</label> <div class="col-lg-5"> <input type="text" class="form-control" name="username" /> </div> </div> <div class="form-group"> <label class="col-lg-3 control-label">密碼</label> <div class="col-lg-5"> <input type="password" class="form-control" name="password" placeholder="密碼是由6到12字符和數字組成(包括下划線和小圓點)"/> </div> </div> <div class="form-group"> <label class="col-lg-3 control-label">手機</label> <div class="col-lg-5"> <input type="text" class="form-control" name="cellphone" placeholder="請輸入手機號"/> </div> </div> <div class="form-group"> <label class="col-lg-3 control-label">郵箱</label> <div class="col-lg-5"> <input type="text" class="form-control" name="email" placeholder="請輸入郵箱"/> </div> </div> <div class="form-group"> <label class="col-lg-3 control-label">身份證號碼</label> <div class="col-lg-5"> <input type="text" class="form-control" name="identifier" placeholder="請輸入身份證號碼"/> </div> </div> <div class="form-group"> <label class="col-lg-3 control-label">日期</label> <div class="col-lg-5"> <input type="text" class="form-control" name="date" placeholder="日期"/> </div> </div> <div class="form-group"> <label class="col-lg-3 control-label">IP地址</label> <div class="col-lg-5"> <input type="text" class="form-control" name="IP" placeholder="IP地址"/> </div> </div> <div class="form-group"> <label class="col-lg-3 control-label">小寫字母</label> <div class="col-lg-5"> <input type="text" class="form-control" name="little" placeholder="請輸入小寫字母"/> </div> </div> <div class="form-group"> <label class="col-lg-3 control-label">大寫字母</label> <div class="col-lg-5"> <input type="text" class="form-control" name="big" placeholder="請輸入大寫字母"/> </div> </div> <div class="form-group"> <label class="col-lg-3 control-label">數字</label> <div class="col-lg-5"> <input type="text" class="form-control" name="digital" placeholder="自然數"/> </div> </div> <div class="form-group"> <label class="col-lg-3 control-label">QQ號</label> <div class="col-lg-5"> <input type="text" class="form-control" name="QQ" placeholder="請輸入QQ號"/> </div> </div> <div class="form-group"> <label class="col-lg-3 control-label"></label> <button type="submit" class="btn btn-info">注冊</button> </div> </form> <script type="text/javascript"> $('#logForm').submit(function(){ //驗證 if(!$('#logForm').data('bootstrapValidator').isValid()){ return false; } var pwdInput = document.getElementsByName("password")[0]; var password = pwdInput.value; // 對密碼加密 var hash = hex_md5(password); pwdInput.value = hash; $.ajax({ url : 'login.htm', data : { "username" : $('#username').val(), "password" : $('#password').val(), }, type : 'post', dataType : 'text', success : function(data) { alert(data); var obj = eval('(' + data + ')'); var value = obj.tips; if(value != 'success'){ $('#tip').html(value); }else{ window.location.href='welcome.htm'; } }, error : function() { alert("提交出了點故障,您可以重新提交試試~"); } }); return false; }); $('#logForm').bootstrapValidator({ fields: { username: { message: 'The username is not valid', validators: { notEmpty: { message: '用戶名不能為空' } } }, password: { message:'密碼無效', validators: { notEmpty: { message: '密碼不能為空' }, stringLength: { min: 6, max: 12, message: '密碼長度必須在6到12之間' }, regexp: { /*以小寫字母、大寫字母、數字、下划線和小圓點的自由組合(其中^代表以什么開頭,\.代表小圓點,+代表子表達式一次或多次,&代表結束)*/ regexp: /^[a-zA-Z0-9_\.]+$/, message: '11位數字' } } }, cellphone: { message:'手機號無效', validators: { notEmpty: { message: '手機號不能為空' }, regexp: { regexp: /^1[3|4|5|7|8][0-9]{9}$/, message: '密碼是由6到12字符和數字組成(包括下划線和小圓點)' } } }, email: { message:'手機號無效', validators: { notEmpty: { message: '郵箱不能為空' }, regexp: { regexp: /^[a-z0-9]+([._\\-]*[a-z0-9])*@([a-z0-9]+[-a-z0-9]*[a-z0-9]+.){1,63}[a-z0-9]+$/, message: '請輸入正確的郵箱地址' } } }, identifier: { message:'無效身份證號', validators: { notEmpty: { message: '身份證號不能為空' }, regexp: {/* *代表匹配前面的字符零次和多次 */ regexp: /^[a-z0-9]+([._\\-]*[a-z0-9])*@([a-z0-9]+[-a-z0-9]*[a-z0-9]+.){1,63}[a-z0-9]+$/, message: '請輸入正確的郵箱地址' } } } , date: { message:'日期格式不正確', validators: { notEmpty: { message: '日期不能為空' }, regexp: {/* ?代表匹配前面的字符一次或零次,\d代表任意一個十進制數字*/ regexp: /^[1-9]\d{3}([-|\/|\.])?((0\d)|([1-9])|(1[0-2]))\1(([0|1|2]\d)|([1-9])|3[0-1])$/, message: '請輸入正確的郵箱地址' } } } , IP: { message:'IP格式不正確', validators: { notEmpty: { message: 'IP不能為空' }, regexp: { regexp: /^((([1-9]\d?)|(1\d{2})|(2[0-4]\d)|(25[0-5]))\.){3}(([1-9]\d?)|(1\d{2})|(2[0-4]\d)|(25[0-5]))$/, message: '請輸入正確的郵箱地址' } } } , little: { message:'格式不正確', validators: { notEmpty: { message: '小寫字母框不能為空' }, regexp: { regexp: /^[a-z]+$/, message: '請輸入正確的郵箱地址' } } } , big: { message:'格式不正確', validators: { notEmpty: { message: '大寫字母框不能為空' }, regexp: { regexp: /^[A-Z]+$/, message: '請輸入正確的郵箱地址' } } } , digital: { message:'格式不正確', validators: { notEmpty: { message: '自然數不能為空' }, regexp: {/*0~9數字范圍內,至少一次(可多次)*/ regexp: /^[0-9]+$/, message: '請輸入正確的自然數' } } } , QQ: { message:'格式不正確', validators: { notEmpty: { message: 'QQ號不能為空' }, regexp: { /*第一位數字在1~9之間,第二個數起在0~9之間,且要求在4到14位數(加上第一位數字,數字格式在5~15位)*/ regexp: /^[1-9][0-9]{4,14}$/, message: '請輸入正確的QQ號碼' } } } } }); </script> </body> </html>
<%@ 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"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>首頁</title> </head> <body> <h1>歡迎進入本網站</h1> </body> </html>
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <!-- 配置springmvc核心 Servlet--> <servlet> <servlet-name>pringmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- 配置文件加載的路徑 --> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/config/springmvc.xml</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>pringmvc</servlet-name> <url-pattern>*.htm</url-pattern> </servlet-mapping> <!-- END 配置springmvc核心 Servlet--> <!-- spring 路徑的配置 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/config/spring.xml</param-value> </context-param> <!--END spring 路徑的配置 --> <!-- 配置spring監聽器 --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!--END 配置spring監聽器 --> </web-app>
注意:要導入bookstrap相關的文件