項目名稱:客戶管理系統
項目描述:
項目基於javaEE平台,B/S模式開發。使用Struts2、Hibernate/Spring進行項目框架搭建。使用Struts中的Action 控制器進行用戶訪問控制。持久層使用Hibernate框架完成ORM處理。使用Spring AOP切面技術進行業務層事務控制。使用Spring IOC容器實現持久層管理。使用Spring IOC容器管理所有的Action,控制Action的生命周期以各種服務的注入關系。前台頁面使用JSP前台頁面技術和jQuery EasyUI 開發。用戶登錄加入MD5加密,權限驗證功能。系統中查詢功能使用了多條件分頁查詢。
下面主要對登錄攔截器校驗和用戶登錄密碼MD5加密進行展示。
編寫一個工具類作為自定義的權限攔截器,用於校驗是否登錄:
public class PrivilegeInterceptor extends MethodFilterInterceptor { @Override //不校驗登陸和注冊方法 protected String doIntercept(ActionInvocation invocation) throws Exception { //1 獲得Session Map<String, Object> session = ActionContext.getContext().getSession(); //2 獲得登陸標識 User user = (User) session.get("user"); //3 判斷標識是否存在 if(user != null){ //存在=> 放行 return invocation.invoke(); }else{ //不存在=> 重定向到登陸頁面 return "toLogin"; } } }
在struts配置文件中配置攔截器:
<interceptors> <!-- 注冊攔截器 --> <interceptor name="privilegeInterceptor" class="com.kevin.web.interceptor.PrivilegeInterceptor"/> <!-- 配置攔截器棧 --> <interceptor-stack name="myStack"> <interceptor-ref name="privilegeInterceptor"> <param name="excludeMethods">login,regist</param> </interceptor-ref> <interceptor-ref name="defaultStack"/> </interceptor-stack> </interceptors> <!-- 指定默認攔截器棧 --> <default-interceptor-ref name="myStack"/>
MD5加密工具類
public class MD5Utils { /** * 使用md5的算法進行加密 */ public static String md5(String plainText) { byte[] secretBytes = null; try { secretBytes = MessageDigest.getInstance("md5").digest( plainText.getBytes()); } catch (NoSuchAlgorithmException e) { throw new RuntimeException("沒有md5這個算法!"); } String md5code = new BigInteger(1, secretBytes).toString(16);// 16進制數字 // 如果生成數字未滿32位,需要前面補0 for (int i = 0; i < 32 - md5code.length(); i++) { md5code = "0" + md5code; } return md5code; } }
在UserService的實現類中寫判斷登錄:
public User getUserByCodePassword(User u) { //1 根據登陸名稱查詢登陸用戶 User existU = ud.getByUserCode(u.getUser_code()); //2 判斷用戶是否存在.不存在=>拋出異常,提示用戶名不存在 if(existU==null){ throw new RuntimeException("用戶名不存在!"); } //3 判斷用戶密碼是否正確=>不正確=>拋出異常,提示密碼錯誤 if(!existU.getUser_password().equals(MD5Utils.md5(u.getUser_password()))){ throw new RuntimeException("密碼錯誤!"); } //4 返回查詢到的用戶對象 return existU; }
在UserService的實現類中寫注冊用戶方法:
public void saveUser(User u) { //1 調用Dao根據注冊的登陸名獲得用戶對象 User existU = ud.getByUserCode(u.getUser_code()); if(existU!=null){ //2 如果獲得到user對象,用戶名已經存在,拋出異常 throw new RuntimeException("用戶名已經存在!"); } //使用MD5對密碼進行加密 u.setUser_password(MD5Utils.md5(u.getUser_password())); //3 調用Dao執行保存 ud.save(u); } public void setUd(UserDao ud) { this.ud = ud; }