统一身份认证系统之用户登录【6】

统一身份认证系统之用户登录的实现

新建登录日志po类【SysLoginLog.java】

package com.dc.pojo;

import com.wordnik.swagger.annotations.ApiModelProperty;

import java.io.Serializable;
import java.util.Date;

/**
 * @title:<h3> 登录日志po类 <h3>
 * @author: Enzo
 * @date: 2018-11-12 10:40
 * @params
 * @return
 **/
public class SysLoginLog implements Serializable {
    @ApiModelProperty(value = "登录日志主键id")
    private int login_log_id;
    @ApiModelProperty(value = " 用户id")
    private int user_id;
    @ApiModelProperty(value = " 用户提交的账号")
    private String user_account;
    @ApiModelProperty(value = " 用户提交的密码")
    private String user_password;
    @ApiModelProperty(value = " 用户姓名")
    private String user_name;
    @ApiModelProperty(value = " 登陆时间 ")
    private Date login_date;
    @ApiModelProperty(value = " 登出时间")
    private Date loginout_date;
    @ApiModelProperty(value = " 请求的ip地址")
    private String request_ip;
    @ApiModelProperty(value = " 登陆状态[1成功,2帐号不存在,3密码错误,4帐号未激活,5帐号被锁定]")
    private int state;
    @ApiModelProperty(value = " 登陆类型[0pc]")
    private int type;
    @ApiModelProperty(value = " 设备imei号")
    private String imei;
    @ApiModelProperty(value = " 手机型号")
    private String model_number;
    @ApiModelProperty(value = " 版本号 ")
    private String version_num;
    @ApiModelProperty(value = " 登出类型[0,1注销]")
    private int loginout_type;
    @ApiModelProperty(value = " 会话sessionId")
    private String session_id;
	public int getLogin_log_id() {
		return login_log_id;
	}
	public void setLogin_log_id(int login_log_id) {
		this.login_log_id = login_log_id;
	}
	public int getUser_id() {
		return user_id;
	}
	public void setUser_id(int user_id) {
		this.user_id = user_id;
	}
	public String getUser_account() {
		return user_account;
	}
	public void setUser_account(String user_account) {
		this.user_account = user_account;
	}
	public String getUser_password() {
		return user_password;
	}
	public void setUser_password(String user_password) {
		this.user_password = user_password;
	}
	public String getUser_name() {
		return user_name;
	}
	public void setUser_name(String user_name) {
		this.user_name = user_name;
	}
	public Date getLogin_date() {
		return login_date;
	}
	public void setLogin_date(Date login_date) {
		this.login_date = login_date;
	}
	public Date getLoginout_date() {
		return loginout_date;
	}
	public void setLoginout_date(Date loginout_date) {
		this.loginout_date = loginout_date;
	}
	public String getRequest_ip() {
		return request_ip;
	}
	public void setRequest_ip(String request_ip) {
		this.request_ip = request_ip;
	}
	public int getState() {
		return state;
	}
	public void setState(int state) {
		this.state = state;
	}
	public int getType() {
		return type;
	}
	public void setType(int type) {
		this.type = type;
	}
	public String getImei() {
		return imei;
	}
	public void setImei(String imei) {
		this.imei = imei;
	}
	public String getModel_number() {
		return model_number;
	}
	public void setModel_number(String model_number) {
		this.model_number = model_number;
	}
	public String getVersion_num() {
		return version_num;
	}
	public void setVersion_num(String version_num) {
		this.version_num = version_num;
	}
	public int getLoginout_type() {
		return loginout_type;
	}
	public void setLoginout_type(int loginOut_type) {
		this.loginout_type = loginOut_type;
	}
	public String getSession_id() {
		return session_id;
	}
	public void setSession_id(String session_id) {
		this.session_id = session_id;
	}
    
}

在【SysUserDao.java】中添加根据用户名查询用户信息接口

SysUser selectUserByAccount(@Param("account") String account);

在【SysUserMapper.xml】中添加根据用户名查询用户信息sql

    <select id="selectUserByAccount" parameterType="string" resultType="com.dc.pojo.SysUser">
        SELECT * from t_sys_user where is_deleted=0 and account=#{account}
    </select>

新增登录日志Dao接口【SysLoginLog.java】

package com.dc.mapper;

import com.dc.pojo.SysLoginLog;

public interface SysLoginLogDao {
    int insert(SysLoginLog loginLog);
}

新增登录日志Mapper.xml【SysLoginLogMapper.xml】

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dc.mapper.SysLoginLogDao">
    <insert id="insert" parameterType="com.dc.pojo.SysLoginLog"
            useGeneratedKeys="true" keyProperty="login_log_id">
        insert into t_sys_loginlog
        (user_id,user_account,user_password,user_name,login_date,request_ip,state,type,imei,model_number,session_id,version_num)
        values
        (#{user_id},#{user_account},#{user_password},#{user_name},now(),#{request_ip},#{state},#{type},#{imei},#{model_number},#{session_id},#{version_num})
    </insert>

</mapper>

新增登录业务层接口【LoginService.java】

package com.dc.service;

import com.dc.base.pojo.BaseModel;
import com.dc.pojo.SysLoginLog;

public interface LoginService {
    void login(SysLoginLog loginLog, BaseModel baseModel)throws Exception;
    
}

新增登录业务层接口实现【LoginServiceImpl.java】

package com.dc.service.impl;

import com.dc.base.pojo.BaseModel;
import com.dc.mapper.SysLoginLogDao;
import com.dc.mapper.SysUserDao;
import com.dc.pojo.SysLoginLog;
import com.dc.pojo.SysUser;
import com.dc.service.LoginService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * @author Enzo
 * @Description TODO
 * @date 2018-11-12 15:24
 */
@Service
public class LoginServiceImpl implements LoginService {
    @Autowired
    private SysUserDao userDao;
    @Autowired
    private SysLoginLogDao loginLogDao;


    /**
     * @return void
     * @title:<h3> 登录 <h3>
     * @author: Enzo
     * @date: 2018-11-12 15:24
     * @params [loginLog, baseModel]
     **/
    public void login(SysLoginLog loginLog, BaseModel baseModel) throws Exception {
        //1.根据用户名查询用户信息
        SysUser user = userDao.selectUserByAccount(loginLog.getUser_account());
        //2.判断帐号是否存在
        if (user == null) {//如果用户信息不存在,说明帐号不存在
            baseModel.setResultCode(1);
            baseModel.setMessage("帐号或密码错误");
            loginLog.setState(2);
        } else {//说明存在帐号
                //3.验证帐号是否激活
                if (user.getState() == 1) {//说启用
                    //4.判断密码是否正确
                    if (user.getPassword().equals((loginLog.getUser_password()))) {//如果密码正确,登录成功
                        loginLog.setState(1);
                        baseModel.setResultCode(0);
                        baseModel.setMessage("登录成功");
                        user.setPassword(null);//密码等敏感数据不返回
                        baseModel.setData(user);
                        loginLog.setUser_id(user.getUser_id());
                        loginLog.setUser_name(user.getName());
                        loginLog.setUser_password(null);//登录成功的密码不保存在登录日志
                    } else {//帐号或密码错误
                        baseModel.setResultCode(1);
                        baseModel.setMessage("帐号或密码错误");
                        loginLog.setState(3);
                    }
                } else {//没启用
                    loginLog.setState(4);
                    baseModel.setResultCode(1);
                    baseModel.setMessage("帐号未激活,请联系管理员");
                    loginLog.setUser_password(null);//未激活的密码不保存在登录日志
                }
        }
        //5.不管登录成功否,记录登录日志
        int count = loginLogDao.insert(loginLog);
        if (count == 0) {//新增登录日志失败
            baseModel.setResultCode(1);
            baseModel.setMessage("新增登录日志失败");
        }
    }

}

新增登录控制器【LoginController.java】

package com.dc.controller;

import com.dc.base.contants.BaseContants;
import com.dc.base.contants.ErrorMesgEnum;
import com.dc.base.controller.BaseController;
import com.dc.base.pojo.BaseModel;
import com.dc.base.pojo.BusinessException;
import com.dc.pojo.SysLoginLog;
import com.dc.service.LoginService;
import com.wordnik.swagger.annotations.ApiImplicitParam;
import com.wordnik.swagger.annotations.ApiImplicitParams;
import com.wordnik.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * @author Enzo
 * @Description TODO
 * @date 2018-11-12 15:39
 */
@Controller
@ResponseBody
@RequestMapping("index")
public class LoginController extends BaseController {
    @Autowired
    LoginService loginService;
  

    /**
     * @return com.dc.base.pojo.BaseModel
     * @title:<h3> 用户登录 <h3>
     * @author: Enzo
     * @date: 2018-11-12 15:56
     * @params [loginLog, baseModel]
     **/
    @ApiOperation(value = "登录", notes = "登录", httpMethod = "POST")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "user_account", value = "帐号"
                    , dataType = "String", paramType = "query"),
            @ApiImplicitParam(name = "user_password", value = "密码"
                    , dataType = "String", paramType = "query")
    })
    @RequestMapping(value = "login", method = RequestMethod.POST)
    public BaseModel login(SysLoginLog loginLog, BaseModel baseModel) throws Exception {

        if (loginLog == null) {
            throw new BusinessException(ErrorMesgEnum.NO_LOGIN.LOGIN_NULL_USER);
        } else if (loginLog.getUser_account() == null || "".equals(loginLog.getUser_account()) || loginLog.getUser_password() == null || "".equals(loginLog.getUser_password())) {
            throw new BusinessException(ErrorMesgEnum.NO_LOGIN.LOGIN_NULL_USER);
        } else {
            loginLog.setType(0);//标志pc登录
            loginLog.setRequest_ip(request.getRemoteAddr());
            loginLog.setModel_number(request.getHeader("User-Agent"));
            loginLog.setSession_id(session.getId());
            loginService.login(loginLog, baseModel);
            session.setAttribute(BaseContants.LOGIN_USER, baseModel.getData());
        }
        return baseModel;
    }

   
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值