前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >系统开发中使用拦截器校验是否登录并使用MD5对用户登录密码进行加密

系统开发中使用拦截器校验是否登录并使用MD5对用户登录密码进行加密

作者头像
Kevin_Zhang
发布2019-02-20 15:31:57
9410
发布2019-02-20 15:31:57
举报
文章被收录于专栏:Kevin-ZhangCGKevin-ZhangCG

项目名称:客户管理系统

项目描述:

  项目基于javaEE平台,B/S模式开发。使用Struts2、Hibernate/Spring进行项目框架搭建。使用Struts中的Action 控制器进行用户访问控制。持久层使用Hibernate框架完成ORM处理。使用Spring AOP切面技术进行业务层事务控制。使用Spring IOC容器实现持久层管理。使用Spring IOC容器管理所有的Action,控制Action的生命周期以各种服务的注入关系。前台页面使用JSP前台页面技术和jQuery EasyUI 开发。用户登录加入MD5加密,权限验证功能。系统中查询功能使用了多条件分页查询。

  下面主要对登录拦截器校验和用户登录密码MD5加密进行展示。

编写一个工具类作为自定义的权限拦截器,用于校验是否登录:

代码语言:javascript
复制
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配置文件中配置拦截器:

代码语言:javascript
复制
    <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加密工具类

代码语言:javascript
复制
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的实现类中写判断登录:

代码语言:javascript
复制
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的实现类中写注册用户方法:

代码语言:javascript
复制
    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;
    }
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-06-01 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档