• 系统开发中使用拦截器校验是否登录并使用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;
        }

      

  • 相关阅读:
    关于IE高级设置里取消“禁用脚本调试”勾选无效的解决方式
    使用NetworkStream收取数据不全问题讨论,列举目前方式,求最佳解决方式
    EntityFramework学习笔记2ORM及EntityFramework简介
    Asp.Net MVC4.0 官方教程 入门指南之一 入门介绍
    EntityFramework学习笔记4实体数据模型及增、删、改操作
    EntityFramework学习笔记3VS2010安装EF5.0
    如果页面引用了外部JS代码,会被IE缓存的解决方法
    EntityFramework学习笔记1写在学习之前
    【专题】概率dp求期望
    金华网赛G(最大费用最大流)&hdu4406
  • 原文地址:https://www.cnblogs.com/Kevin-ZhangCG/p/9114123.html
Copyright © 2020-2023  润新知