系統開發中使用攔截器校驗是否登錄並使用MD5對用戶登錄密碼進行加密


項目名稱:客戶管理系統

項目描述:

  項目基於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;
    }

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM