蒋振飞的博客 - SSH整合CRM(第2天)用户模块   
正在加载蒋振飞的博客...
V3.0
蒋振飞的博客

SSH整合CRM(第2天)用户模块

发布时间: 2019年03月26日 发布人: 蒋振飞 热度: 186 ℃ 评论数: 0

一、准备工作

1.User.java

建立User类与数据库的映射。

public class User {

    private Long user_id;
    private String user_code;
    private String user_name;
    private String user_password;
    private String user_state;
	
}

2.User.hbm.xml

路径在相同文件夹下。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class name="com.jzfblog.crm.domain.User" table="sys_user">
        <id name="user_id" column="user_id">
            <generator class="native"></generator>
        </id>
        
        <property name="user_code" column="user_code" />
        <property name="user_name" column="user_name" />
        <property name="user_password" column="user_password" />
        <property name="user_state" column="user_state" />
    </class>
</hibernate-mapping>

3.Web层(表示层)

创建UserAction.java文件,继承ActionSupport并加入User的模型驱动和userService属性注入。

/**
 * 用户管理Action类
 * @author 蒋振飞
 *
 */
public class UserAction extends ActionSupport implements ModelDriven<User> {
	
    // 模型驱动
    private User user = new User();
	
    public User getModel() {
        return user;
    }
	
    // 属性注入
    private UserService userService;
	
    public void setUserService(UserService userService) {
        this.userService = userService;
    }
	
}

4.Service层(业务逻辑层)

创建UserService接口和UserServiceImpl.java文件,加入userDao属性注入。

@Transactional
public class UserServiceImpl implements UserService {
 
    private UserDao userDao;
 
    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }
 
}

5.Dao层(数据访问层)

创建好UserDao接口和UserDaoImpl.java文件,继承HibernateDaoSupport。

public class UserDaoImpl extends HibernateDaoSupport implements UserDao {

}

6.applicationContext.xml

在applicationContext.xml文件中加入Action、Service、Dao的管理。

<bean id="userAction" class="com.jzfblog.crm.web.action.UserAction" scope="prototype">
    <property name="userService" ref="userService" />
</bean>
<bean id="userService" class="com.jzfblog.crm.service.impl.UserServiceImpl">
    <property name="userDao" ref="userDao" />
</bean>
<bean id="userDao" class="com.jzfblog.crm.dao.impl.UserDaoImpl">
    <property name="sessionFactory" ref="sessionFactory" />
</bean>

二、用户注册功能

1.确定注册地址

<form id=form1 name=form1 action="${ pageContext.request.contextPath }/user_register.action" method="post"> 

</form>

2.strut2.xml

在struts.xml中添加user_register.action的路径。

<!-- 配置Action --> 
<package name="crm" extends="struts-default" namespace="/"> 
    <!-- 配置用户管理的Action --> 
    <action name="user_*" class="userAction" method="{1}"> 
        <result name="login">/login.jsp</result> 
    </action> 
</package>

3.UserAction.java

在创建好的UserAction类中,添加register方法。

/** * 用户注册 */ 
public String register() { 

    userService.register(user); 
    return LOGIN; 
}

4.UserServiceImpl.java

在UserServiceImpl类中,添加register方法。

/**
 * 业务层注册用户
 */
public void register(User user) {

    // 对用户密码进行加密
    String user_password = MD5Utils.md5(user.getUser_password()); 
    user.setUser_password(user_password);
        
    // 修改用户状态
    user.setUser_state("1");
     userDao.save(user);
}

5.UserDaoImpl.java

在UserDaoImpl类中,添加save方法。

/**
 * 保存用户
 */public void save(User user) {
        
    this.getHibernateTemplate().save(user);
}

6.对密码进行加密

MD5Utils.md5(user.getUser_password());

package com.jzfblog.crm.utils;
 
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
 
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;
    }
 
    public static void main(String[] args) {
        System.out.println(md5("123"));
    }
 
}

三、用户登录功能

1.确定登录地址

<form id=form1 name=form1 action="${ 
pageContext.request.contextPath }/user_login.action" method=post 
target="_parent">

</form>

2.struts.xml

在struts.xml中添加user_login.action的路径。

<!-- 配置用户管理的Action -->
<action name="user_*" class="userAction" method="{1}">
    <result name="login">/login.jsp</result>
    <!-- 登录成功后,一般使用重定向 -->
    <result name="success" type="redirect">/index.jsp</result>
</action>

3.UserAction.java

在创建好的UserAction类中,添加login方法。

/**
 * 用户登录
 */
public String login() {

    User existUser = userService.login(user);
        
    if(existUser == null) {
        // 登录失败
        // 添加错误信息
        this.addActionError("用户名或密码错误");
        return LOGIN;
    }else {
        // 登录成功,将existUser放入session中
        // 方法一:使用ServletActionContext
        // ServletActionContext.getRequest().getSession().setAttribute("existUser", existUser);
        // 方法二:使用ActionContext
        ActionContext.getContext().getSession().put("existUser", existUser);
        return SUCCESS;
    }
}

4.UserServiceImpl.java

在UserServiceImpl类中,添加login方法。

/**
 * 业务层用户登录
 */
public User login(User user) {
        
    // 将客户端提交上来的密码进行加密,再与数据库比对
    user.setUser_password(MD5Utils.md5(user.getUser_password()));
    return userDao.findUser(user);
}

5.UserDaoImpl.java

在UserDaoImpl类中,添加findUser方法

/**
 * 查询用户
 */
public User findUser(User user) {
        
    // find只能查询出集合,所以在返回值的时候需要判断一下集合
    List<User> list = (List<User>) this.getHibernateTemplate().find("from User where user_code=? and user_password=?", user.getUser_code(), user.getUser_password());
        
    // 如果查询出来的集合大于0
    if(list.size() > 0) {
        return list.get(0);
    }
    return null;
}

四、拦截器登录

1.PrivilegeInterceptor.java

编写PrivilegeInterceptor类继承拦截器类。

public class PrivilegeInterceptor extends MethodFilterInterceptor{
    @Override
    protected String doIntercept(ActionInvocation invocation) throws Exception {
    
        // 1.判断sesion中是否存在登录该用户的信息
        User existUser = (User) ActionContext.getContext().getSession().get("existUser");
        if(existUser == null) {
            // 没有登录,返回错误信息,跳转到登录页面
            ActionSupport actionSupport = (ActionSupport) invocation.getAction();
            actionSupport.addActionError("您尚未登录!没有访问权限");
            return actionSupport.LOGIN;
        }else {
            // 已经登录,则跳到下一个拦截器即可
            return invocation.invoke();
        }
        
    }
}

2.在struts.xml中配置拦截器

除UserAction中的login和register方法不拦截,其他均需要拦截。

<!-- 拦截器,写在package下 -->
<interceptors> 
    <interceptor name="privilegeInterceptor" class="com.jzfblog.crm.web.interceptor.PrivilegeInterceptor" />
</interceptors>
 
<global-results>
    <result name="login">/login.jsp</result>
</global-results>
 
<!--用户Action拦截器-->
<interceptor-ref name="privilegeInterceptor">
    <param name="excludeMethods">register,login</param>
</interceptor-ref>
<interceptor-ref name="defaultStack"/>

打赏 蒋振飞

取消

感谢您的支持,我会继续努力的!

扫码支持
一分也是爱     一块不嫌多

点击 支付宝 或 微信 打赏蒋振飞

打开支付宝扫一扫,即可进行扫码打赏哦

评论列表