java登录实现

5 篇文章 0 订阅

controller层:

@Api(tags = "系统")
@RestController
@RequestMapping("/login")
public class LoginController extends BaseController{

	@Autowired
	private UplusUserService uplusUserService;

	@ApiOperation(value = "登录")
	@PostMapping(value = "/userLogin", name = "登录")
	public Result<UserLoginVo> userLogin(HttpServletRequest request,@RequestBody LoginDto loginDto) {
		return uplusUserService.userLogin(request,loginDto);
	}

}

入参Dto层:

@Data
@ApiModel(value = "LoginDto",description = "登录入参实体")
public class LoginDto implements Serializable {

    private static final long serialVersionUID = 1L;
    @ApiModelProperty(value = "手机号")
    private String phone;
    @ApiModelProperty(value = "密码")
    private String password;
    @ApiModelProperty(value = "验证码")
    private String phoneCode;
    @ApiModelProperty(value = "登录方式:1.验证码登录;2.密码登录")
    private Integer loginWay;
}
出参Vo层:
@Data
@ApiModel(value = "UserLoginVo",description = "登录出参")
public class UserLoginVo implements Serializable {
	
	private static final long serialVersionUID = 1L;

	@ApiModelProperty("授权码")
	private String authorization;
	@ApiModelProperty("用户信息")
	private UplusUser user;
	
}


@Table(name = "UPLUS_USER")
public class UplusUser implements Serializable {
	@Id
	@Column(name = "ID")
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private Long id;
	@Column(name = "DEPOT_ID")
	private Long depotId;
	@Column(name = "USER_NAME")
	private String userName;
	@Column(name = "PASSWORD")
	private String password;
	@Column(name = "PROXY_NUMBER")
	private String proxyNumber;
	@Column(name = "NICK_NAME")
	private String nickName;
	@Column(name = "PHONE")
	private String phone;
	@Column(name = "TYPE_CD")
	private String typeCd;
	@Column(name = "TYPE")
	private String type;
	@Column(name = "SEX")
	private String sex;
	@Column(name = "COMPANY")
	private String company;
	@Column(name = "SECURITY_KEY")
	private String securityKey;
	@Column(name = "SUPER_USER_ID")
	private Long superUserId;
	@Column(name = "LOCK_USER")
	private String lockUser;
	@Column(name = "CREATE_DATE")
	private Date createDate;
	@Column(name = "CREATE_USER")
	private Long createUser;
	@Column(name = "UPDATE_DATE")
	private Date updateDate;
	@Column(name = "UPDATE_USER")
	private Long updateUser;
	@Column(name = "HEADER_URL")
	private String headerUrl;
	@Column(name = "DELETE_DATE")
	private Date deleteDate;
	@Column(name = "DELETE_USER")
	private Long deleteUser;
	@Column(name = "DELETE_FLAG")
	private String deleteFlag;
	@Column(name = "INVITE_CODE")
	private String inviteCode;
	@Column(name = "INVITE_END_DATE")
	private Date inviteEndDate;
	@Column(name = "PROFIT_DATE")
	private Date profitDate;
	@Column(name = "PROFIT")
	private Integer profit;
}
Service层:
public interface UplusUserService{

	/**
	 * 	登录
	 * */
	Result<UserLoginVo> userLogin(HttpServletRequest request,LoginDto loginDto);

}

Service层impl:

@Service
public class UplusUserServiceImpl implements UplusUserService {

	@Autowired
	private UplusUserDao uplusUserDao;

	@Autowired
	private UplusOrderDao uplusOrderDao;

	@Autowired
	private UplusMasterDao uplusMasterDao;

	@Autowired
	private UPlusWalletFlowDao uPlusWalletFlowDao;

	@Autowired
	private RedisUtil redisUtil;

	@Autowired
    UplusBrokerageRecordDao uplusBrokerageRecordDao;

	@Override
	public Result<UserLoginVo> userLogin(HttpServletRequest request, LoginDto ldto) {
		if (null == ldto) {
			return Result.failure(ResultCode.PARAM_IS_BLANK);
		}
		if (null == ldto.getPhone() || "".equals(ldto.getPhone())) {
			return Result.failure(ResultCode.PARAM_IS_BLANK);
		}
		// 根据手机查询用户是否存在
		UplusUser uu = new UplusUser();
		uu.setPhone(ldto.getPhone());
		UplusUser uplusUser = this.uplusUserDao.selectOne(uu);
		if (uplusUser == null) {
			return Result.failure(ResultCode.USER_OR_PSW_ERROR);
		}
		// 判断用户权限
		if ((UserEnum.UserTypeEnum.FWS.getValue().equals(uplusUser.getType()))
				|| (UserEnum.UserTypeEnum.GHS.getValue().equals(uplusUser.getType()))) {
			return Result.failure(ResultCode.LOGIN_NO_ACCESS);
		}
		// 判断当前用户状态
		if (uplusUser.getLockUser().equals(UserEnum.UserLockEnum.LOCK.getCode().toString())) {
			return Result.failure(ResultCode.USER_LOCK);
		}
		// 验证码登录
		if (ldto.getLoginWay() == UserEnum.UserLoginWayEnum.CODE.getCode()) {
//			String phoneCode = (String) redisUtil.get(ldto.getPhone());
//			if (null == phoneCode || "".equals(phoneCode)) {
//				return Result.failure(ResultCode.USER_LOGIN_ERROR_NOTPHONEORCODE);
//			}
			if (!"123456".equals(ldto.getPhoneCode())) {
				return Result.failure(ResultCode.USER_LOGIN_CODE_OFNOAVAIL);
			}
		} else {
			// 判断用户密码是否正确
			String pswMD5 = CommonUtil.Md5(ldto.getPassword() + uplusUser.getSecurityKey());
			if (!pswMD5.equals(uplusUser.getPassword())) {
				return Result.failure(ResultCode.USER_OR_PSW_ERROR);
			}
		}
		String authorization = JwtUtil.sign(uplusUser.getId(), uplusUser.getSecurityKey());
		UserLoginVo userLoginVo = new UserLoginVo();
		userLoginVo.setAuthorization(authorization);
		userLoginVo.setUser(uplusUser);
		request.getSession().setAttribute(CommonUtil.Md5(uplusUser.getId().toString()), uplusUser);
		// 销毁redis验证码
		redisUtil.delete(ldto.getPhone());
		return Result.success(userLoginVo);
	}
}

mapper层:

public interface UplusUserDao extends Mapper<UplusUser> {
	/**
	 * 查询我的团队总人数
	 */
	int selectCountById(Long id);

	Page<UserExpand> queryMember(TeamListDto td);

	Page<UserExpand> queryHeadUserSales(TeamListDto td);

	UserExpand findUserExpandById(Long id);

	/**
	 * 根据Phone 查询用户
	 */
	UserLoginVo findByPhone(String phone);
	/**
	 * 根据用户id查询用户业绩
	 */
}





<?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.uplus.api.dao.UplusUserDao">

  <!--加入缓存-->
<!--  <cache type="com.uplus.api.cache.MybatisRedisCache" />-->
  <resultMap id="BaseResultMap" type="com.uplus.api.bean.UplusUser">
    <id column="ID" jdbcType="BIGINT" property="id" />
    <result column="DEPOT_ID" jdbcType="BIGINT" property="depotId" />
    <result column="USER_NAME" jdbcType="VARCHAR" property="userName" />
    <result column="PASSWORD" jdbcType="VARCHAR" property="password" />
    <result column="PROXY_NUMBER" jdbcType="VARCHAR" property="proxyNumber" />
    <result column="NICK_NAME" jdbcType="VARCHAR" property="nickName" />
    <result column="PHONE" jdbcType="VARCHAR" property="phone" />
    <result column="TYPE" jdbcType="VARCHAR" property="type" />
    <result column="SEX" jdbcType="VARCHAR" property="sex" />
    <result column="COMPANY" jdbcType="VARCHAR" property="company" />
    <result column="SECURITY_KEY" jdbcType="VARCHAR" property="securityKey" />
    <result column="SUPER_USER_ID" jdbcType="BIGINT" property="superUserId" />
    <result column="LOCK_USER" jdbcType="VARCHAR" property="lockUser" />
    <result column="CREATE_DATE" jdbcType="TIMESTAMP" property="createDate" />
    <result column="CREATE_USER" jdbcType="BIGINT" property="createUser" />
    <result column="UPDATE_DATE" jdbcType="TIMESTAMP" property="updateDate" />
    <result column="UPDATE_USER" jdbcType="BIGINT" property="updateUser" />
    <result column="HEADER_URL" jdbcType="VARCHAR" property="headerUrl" />
    <result column="DELETE_DATE" jdbcType="TIMESTAMP" property="deleteDate" />
    <result column="DELETE_USER" jdbcType="BIGINT" property="deleteUser" />
    <result column="DELETE_FLAG" jdbcType="VARCHAR" property="deleteFlag" />
    <result column="INVITE_CODE" jdbcType="VARCHAR" property="inviteCode" />
    <result column="INVITE_END_DATE" jdbcType="TIMESTAMP" property="inviteEndDate" />
    <result column="PROFIT" jdbcType="INTEGER" property="profit" />
    <result column="PROFIT_DATE" jdbcType="TIMESTAMP" property="profitDate" />
  </resultMap>
  <resultMap id="userModelMap" type="com.uplus.api.vo.address.UserLoginVo" extends="BaseResultMap">
    <result column="CREATE_DATE_TEXT" jdbcType="VARCHAR" property="createDateText"/>
    <result column="CREATE_USER_NAME" jdbcType="VARCHAR" property="createUserName"/>
    <result column="UPDATE_USER_NAME" jdbcType="VARCHAR" property="updateUserName"/>
    <result column="UPDATE_DATE_TEXT" jdbcType="VARCHAR" property="updateDateText"/>
    <result column="SUPER_USER_NAME" jdbcType="VARCHAR" property="superUserName"/>
    <result column="SUPER_USER_PHONE" jdbcType="VARCHAR" property="superUserPhone"/>
    <result column="TYPE_NAME" jdbcType="VARCHAR" property="typeName"/>
    <result column="depotName" jdbcType="VARCHAR" property="depotName"/>
    <result column="USER_TYPE" jdbcType="VARCHAR" property="userType"/>
    <result column="MASTER_NAME" jdbcType="VARCHAR" property="masterName"/>
  </resultMap>
  <!--根据phone查询-->
  <select id="findByPhone"  parameterType="String"  resultMap="userModelMap">
    SELECT uu1.*,ud.`NAME` AS depotName,  date_format(uu1.CREATE_DATE, '%Y-%c-%d %k:%i:%s' ) AS CREATE_DATE_TEXT,
    date_format(uu1.UPDATE_DATE, '%Y-%c-%d %k:%i:%s' ) AS UPDATE_DATE_TEXT,
    uu2.USER_NAME  AS SUPER_USER_NAME,uu2.PHONE AS SUPER_USER_PHONE ,uu3.USER_NAME AS CREATE_USER_NAME,
    uu4.USER_NAME AS UPDATE_USER_NAME,um3.`NAME` AS TYPE_NAME
    FROM UPLUS_USER uu1
    LEFT OUTER JOIN UPLUS_USER uu2  on uu1.SUPER_USER_ID=uu2.ID AND uu1.SUPER_USER_ID IS NOT NULL
    AND uu2.DELETE_FLAG='0'
    LEFT OUTER JOIN UPLUS_DEPOT ud ON ud.id = uu1.DEPOT_ID
    LEFT OUTER JOIN UPLUS_USER uu3 ON uu1.CREATE_USER =uu3.ID AND uu1.CREATE_USER IS NOT NULL
    LEFT OUTER JOIN UPLUS_USER uu4 ON uu1.UPDATE_USER =uu4.ID AND uu1.UPDATE_USER IS NOT NULL
    LEFT OUTER JOIN UPLUS_MASTER um3 ON uu1.TYPE = um3.code and um3.master_gp= '01'
    WHERE uu1.DELETE_FLAG='0'
    AND uu1.PHONE = #{phone}
  </select>
	<resultMap id="UserMap"
		type="com.uplus.api.bean.UplusUser">
		<!-- WARNING - @mbg.generated -->
		<id column="ID" jdbcType="BIGINT" property="id" />
		<result column="DEPOT_ID" jdbcType="BIGINT" property="depotId" />
		<result column="USER_NAME" jdbcType="VARCHAR"
			property="userName" />
		<result column="PASSWORD" jdbcType="VARCHAR"
			property="password" />
		<result column="PROXY_NUMBER" jdbcType="VARCHAR"
			property="proxyNumber" />
		<result column="NICK_NAME" jdbcType="VARCHAR"
			property="nickName" />
		<result column="PHONE" jdbcType="VARCHAR" property="phone" />
		<result column="TYPE" jdbcType="VARCHAR" property="type" />
		<result column="SEX" jdbcType="VARCHAR" property="sex" />
		<result column="COMPANY" jdbcType="VARCHAR" property="company" />
		<result column="SECURITY_KEY" jdbcType="VARCHAR"
			property="securityKey" />
		<result column="SUPER_USER_ID" jdbcType="BIGINT"
			property="superUserId" />
		<result column="LOCK_USER" jdbcType="VARCHAR"
			property="lockUser" />
		<result column="CREATE_DATE" jdbcType="TIMESTAMP"
			property="createDate" />
		<result column="CREATE_USER" jdbcType="BIGINT"
			property="createUser" />
		<result column="UPDATE_DATE" jdbcType="TIMESTAMP"
			property="updateDate" />
		<result column="UPDATE_USER" jdbcType="BIGINT"
			property="updateUser" />
		<result column="HEADER_URL" jdbcType="VARCHAR"
			property="headerUrl" />
		<result column="DELETE_DATE" jdbcType="TIMESTAMP"
			property="deleteDate" />
		<result column="DELETE_USER" jdbcType="BIGINT"
			property="deleteUser" />
		<result column="DELETE_FLAG" jdbcType="VARCHAR"
			property="deleteFlag" />
		<result column="INVITE_CODE" jdbcType="VARCHAR"
			property="inviteCode" />
		<result column="INVITE_END_DATE" jdbcType="TIMESTAMP"
			property="inviteEndDate" />
		<result column="PROFIT" jdbcType="INTEGER" property="profit" />
		<result column="PROFIT_DATE" jdbcType="TIMESTAMP"
			property="profitDate" />
	</resultMap>

	<resultMap id="UserExpandMap"
		type="com.uplus.api.bean.userexpand.UserExpand" extends="UserMap">
		<result column="NAME" jdbcType="VARCHAR" property="masterName" />
	</resultMap>
	<!-- 查询团队下一级成员数 -->
	<select id="selectCountById" resultType="Integer">
		SELECT
		count( 1 )
		FROM
		UPLUS_USER uu
		WHERE
		uu.SUPER_USER_ID = #{userId}
		AND uu.DELETE_FLAG = '0'
		AND uu.ID != #{userId}
	</select>
	
	<!-- 查询团队下一级成员数 -->
	<select id="queryMember"
		parameterType="com.github.pagehelper.Page"
		resultType="com.uplus.api.bean.userexpand.UserExpand">
		SELECT
			tb.ID AS id,
			tb.TYPE AS type,
			tb.NICK_NAME AS nickName,
			tb.PHONE AS phone,
			tb.HEADER_URL AS headerUrl,
			tb.LOCK_USER AS lockUser,
			tb.NAME AS masterName,
			SUM( tb.totlaSale ) AS totlaSales
		FROM
		(	SELECT uu.ID,uu.TYPE,uu.USER_NAME,uu.NICK_NAME,uu.PHONE,uu.HEADER_URL,uu.LOCK_USER,um.NAME,
			IFNULL( SUM( uo.PAY_PRICE ), 0 ) - IFNULL( SUM( uo.POSTAGE ), 0 ) AS	totlaSale
			FROM
			UPLUS_USER uu
			LEFT JOIN UPLUS_ORDER uo ON uo.USER_ID = uu.ID
			AND uo.STATE = 1
			AND uo.IS_PAY = 1
			<if test="startDate != '' and startDate != null">
			and DATE_FORMAT(uo.PAY_TIME,'%Y-%m-%d') &gt;= #{startDate}
			</if>
			<if test="endDate != '' and endDate != null">
				and DATE_FORMAT(uo.PAY_TIME,'%Y-%m-%d') &lt;= #{endDate}
			</if>
			LEFT JOIN UPLUS_MASTER um ON uu.TYPE = um.CODE
			WHERE
			uu.SUPER_USER_ID = #{userId}
			AND uu.DELETE_FLAG = '0'
			AND uu.ID != #{userId}
			GROUP BY
			uu.ID,
			um.NAME

			UNION ALL
		SELECT
			uu.ID,
			uu.TYPE,
			uu.USER_NAME,
			uu.NICK_NAME,
			uu.PHONE,
			uu.HEADER_URL,
			uu.LOCK_USER,
			um.NAME,
			IFNULL( SUM( uo.PAY_PRICE ), 0 ) - IFNULL( SUM( uo.POSTAGE ), 0 ) AS
			totlaSale
		FROM
			UPLUS_USER uu
			LEFT JOIN UPLUS_USER uu1 ON uu1.DELETE_FLAG = '0'
			AND uu1.LOCK_USER = 1
			AND uu1.SUPER_USER_ID = uu.ID
			LEFT JOIN UPLUS_ORDER uo ON uo.USER_ID = uu1.ID
			AND uo.STATE = 1
			AND uo.IS_PAY = 1
			<if test="startDate != '' and startDate != null">
			and DATE_FORMAT(uo.PAY_TIME,'%Y-%m-%d') &gt;= #{startDate}
			</if>
			<if test="endDate != '' and endDate != null">
				and DATE_FORMAT(uo.PAY_TIME,'%Y-%m-%d') &lt;= #{endDate}
			</if>
			LEFT JOIN UPLUS_MASTER um ON uu.TYPE = um.CODE
			WHERE
			uu.SUPER_USER_ID = #{userId}
			AND uu.DELETE_FLAG = '0'
			AND uu.ID != #{userId}
			GROUP BY
			uu.ID,
			um.NAME
		) tb
		<where>
			<if test="searchName != null and searchName != ''">
				AND (
				tb.USER_NAME like concat( '%', #{searchName}, '%')
				OR tb.NICK_NAME like concat( '%', #{searchName}, '%')
				OR tb.PHONE like concat( '%', #{searchName}, '%')
				)
			</if>
		</where>
			GROUP BY
			ID,
			TYPE,
			NICK_NAME,
			PHONE,
			HEADER_URL,
			LOCK_USER,
			NAME
			ORDER BY
			totlaSales DESC
	</select>

	<select id="queryHeadUserSales"
		parameterType="com.github.pagehelper.Page"
		resultType="com.uplus.api.bean.userexpand.UserExpand">
		SELECT
		uu.ID as id,
		uu.TYPE as type,
		uu.NICK_NAME as nickName,
		uu.PHONE as
		phone,
		uu.HEADER_URL as headerUrl,
		uu.LOCK_USER as lockUser,
		um.NAME AS
		masterName,
		IFNULL( SUM( uo.PAY_PRICE ), 0 ) - IFNULL( SUM(
		uo.POSTAGE
		), 0 ) AS
		totlaSales
		FROM
		UPLUS_USER uu
		INNER JOIN UPLUS_MASTER
		um ON
		um.MASTER_GP = '01'
		LEFT JOIN UPLUS_ORDER uo ON uo.USER_ID =
		uu.ID
		AND
		uo.STATE = 1
		AND uo.IS_PAY = 1
		<if test="startDate != '' and startDate != null">
			and DATE_FORMAT(uo.PAY_TIME,'%Y-%m-%d') &gt;= #{startDate}
		</if>
		<if test="endDate != '' and endDate != null">
			and DATE_FORMAT(uo.PAY_TIME,'%Y-%m-%d') &lt;= #{endDate}
		</if>

		WHERE
		uu.SUPER_USER_ID = #{userId}
		AND um.`CODE` = uu.TYPE
		AND uu.TYPE =
		'XSY'
		AND uu.DELETE_FLAG = '0'
		<if test="searchName != null and searchName != ''">
			AND (
			uu.USER_NAME like "%"#{searchName}"%"
			OR uu.NICK_NAME
			like "%"#{searchName}"%"
			OR uu.PHONE like "%"#{searchName}"%"
			)
		</if>
		GROUP BY
		uu.ID,
		uu.NICK_NAME,
		uu.HEADER_URL,
		uu.PHONE,
		uu.LOCK_USER,
		um.NAME
		ORDER BY
		totlaSales DESC
	</select>
	<!-- TODO * 后期根据需求更换 -->
	<select id="findUserExpandById" resultMap="UserExpandMap">
		SELECT
			um.NAME,
			uu.*
		FROM
			UPLUS_USER uu
			LEFT JOIN UPLUS_MASTER um
			ON uu.TYPE = um.CODE
			AND um.MASTER_GP = '01'
		WHERE
			uu.ID = #{id}
			AND uu.DELETE_FLAG = '0'
	</select>
</mapper>

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java实现登录功能,通常有多种方式。在初学时,一般采用Servlet来处理登录请求。你可以创建一个登录页面,用户在该页面输入用户名和密码后,点击提交按钮,将表单数据发送到后台的Servlet。Servlet通过获取表单参数,与数据库的用户信息进行校验,并根据校验结果返回相应的响应页面,以实现登录功能。 除了传统的Servlet方式,还可以使用单点登录技术来实现。单点登录是指用户只需在登录时进行一次注册,就可以在多个系统间自由穿梭,不必重复输入用户名和密码来确定身份。在Java,可以使用一些框架或工具来实现单点登录功能,例如使用JWT(JSON Web Token)来生成并验证用户身份信息。JWT是按照一定规则生成字符串,包含用户信息,并且可以在多个系统之间进行传递和验证。通过在登录过程生成并保存JWT,在其他系统验证JWT的有效性,可以实现单点登录的功能。 总结起来,实现Java登录功能的方法有: 1. 使用Servlet处理登录请求,通过与数据库的用户信息进行校验,返回响应页面。 2. 使用单点登录技术,如JWT,生成并验证用户身份信息,实现在多个系统间的自由穿梭。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Java项目实战:用户登录业务的实现](https://blog.csdn.net/qq_35254085/article/details/115122555)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值