獲取用戶登錄信息,忘記密碼,提示問題與答案,重置密碼功能開發
阿新 • • 發佈:2018-01-10
ava getc truct encode err logout tis ride cep
package com.mmall.controller.portal; import com.mmall.common.Const; import com.mmall.common.ServerResponse; import com.mmall.pojo.User; import com.mmall.service.IUserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; importorg.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; import javax.servlet.http.HttpSession; /** * Created by think on 2018/1/8. */ @Controller @RequestMapping("/user/")public class UserController { @Autowired private IUserService iUserService; /** * @param username * @param password * @param session * @return */ @RequestMapping(value = "login.do", method = RequestMethod.POST) @ResponseBody public ServerResponse<User> login(String username, String password, HttpSession session) { ServerResponse<User> response = iUserService.login(username, password); if (response.isSuccess()) { session.setAttribute(Const.CURRENT_USER, response.getData()); } return response; } @RequestMapping(value = "logout.do", method = RequestMethod.POST) @ResponseBody public ServerResponse<String> logout(HttpSession session) { session.removeAttribute(Const.CURRENT_USER); return ServerResponse.createBySuccess(); } @RequestMapping(value = "register.do", method = RequestMethod.POST) @ResponseBody public ServerResponse<String> register(User user) { return iUserService.register(user); } @RequestMapping(value = "check_valid.do", method = RequestMethod.POST) @ResponseBody public ServerResponse<String> checkValid(String str, String type) { return iUserService.checkValid(str, type); } @RequestMapping(value = "get_user_info.do", method = RequestMethod.POST) @ResponseBody public ServerResponse<User> getUserInfo(HttpSession session) { User user = (User) session.getAttribute(Const.CURRENT_USER); if (user != null) { return ServerResponse.createBySuccess(user); } return ServerResponse.createByErrorMessage("用戶未登錄,無法獲取當前用戶的信息"); } @RequestMapping(value = "forget_get_question.do",method = RequestMethod.POST) @ResponseBody public ServerResponse<String> forgetGetQuestion(String username){ return iUserService.selectQuestion(username); } @RequestMapping(value = "forget_check_answer.do",method = RequestMethod.POST) @ResponseBody public ServerResponse<String> forgetCheckAnswer(String username,String question,String answer){ return iUserService.checkAnswer(username,question,answer); } }
package com.mmall.service; import com.mmall.common.ServerResponse; import com.mmall.pojo.User; /** * Created by think on 2018/1/8. */ public interface IUserService { ServerResponse<User> login(String username, String password); ServerResponse<String> register(User user); ServerResponse<String> checkValid(String str,String type); ServerResponse selectQuestion(String username); ServerResponse<String> checkAnswer(String username, String question, String answer); }
package com.mmall.service.impl; import com.mmall.common.Const; import com.mmall.common.ServerResponse; import com.mmall.common.TokenCache; import com.mmall.dao.UserMapper; import com.mmall.pojo.User; import com.mmall.service.IUserService; import com.mmall.util.MD5Util; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.UUID; /** * Created by think on 2018/1/8. */ @Service("iUserService") public class UserServiceImpl implements IUserService { @Autowired private UserMapper userMapper; @Override public ServerResponse<User> login(String username, String password) { int resultCount = userMapper.checkUsername(username); if (resultCount == 0) { return ServerResponse.createByErrorMessage("用戶名不存在"); } String md5Password = MD5Util.MD5EncodeUtf8(password); User user = userMapper.selectLogin(username, md5Password); if (user == null) { return ServerResponse.createByErrorMessage("密碼錯誤"); } user.setPassword(org.apache.commons.lang3.StringUtils.EMPTY); return ServerResponse.createBySuccess("登錄成功", user); } public ServerResponse<String> register(User user) { ServerResponse validResponse = this.checkValid(user.getUsername(), Const.USERNAME); if (!validResponse.isSuccess()) { return validResponse; } validResponse = this.checkValid(user.getEmail(), Const.EMAIL); if (!validResponse.isSuccess()) { return validResponse; } user.setRole(Const.Role.ROLE_CUSTOMER); //MD5加密 user.setPassword(MD5Util.MD5EncodeUtf8(user.getPassword())); int resultCount = userMapper.insert(user); if (resultCount == 0) { return ServerResponse.createByErrorMessage("註冊失敗"); } return ServerResponse.createBySuccessMessage("註冊成功"); } public ServerResponse<String> checkValid(String str, String type) { if (org.apache.commons.lang3.StringUtils.isNotBlank(type)) { //開始校驗 if (Const.USERNAME.equals(type)) { int resultCount = userMapper.checkUsername(str); if (resultCount > 0) { return ServerResponse.createByErrorMessage("用戶名已存在"); } } if (Const.EMAIL.equals(type)) { int resultCount = userMapper.checkEmail(str); if (resultCount > 0) { return ServerResponse.createByErrorMessage("email已存在"); } } } else { return ServerResponse.createByErrorMessage("參數錯誤"); } return ServerResponse.createBySuccessMessage("校驗成功"); } public ServerResponse selectQuestion(String username) { ServerResponse validResponse = this.checkValid(username, Const.USERNAME); if (validResponse.isSuccess()) { //用戶不存在 return ServerResponse.createByErrorMessage("用戶不存在"); } String question = userMapper.selectQuestionByUsername(username); if (org.apache.commons.lang3.StringUtils.isNotBlank(question)) { return ServerResponse.createBySuccess(question); } return ServerResponse.createByErrorMessage("找回密碼的問題是空的"); } public ServerResponse<String> checkAnswer(String username, String question, String answer) { int resultCount = userMapper.checkAnswer(username, question, answer); if (resultCount > 0) { //說明問題及問題答案是這個用戶的,並且是正確的 String forgetToken = UUID.randomUUID().toString(); TokenCache.setKey(TokenCache.TOKEN_PREFIX + username, forgetToken); return ServerResponse.createBySuccess(forgetToken); } return ServerResponse.createByErrorMessage("問題的答案錯誤"); } }
package com.mmall.common; import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheLoader; import com.google.common.cache.LoadingCache; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.concurrent.TimeUnit; /** * Created by geely */ public class TokenCache { private static Logger logger = LoggerFactory.getLogger(TokenCache.class); public static final String TOKEN_PREFIX = "token_"; //LRU算法 private static LoadingCache<String,String> localCache = CacheBuilder.newBuilder().initialCapacity(1000).maximumSize(10000).expireAfterAccess(12, TimeUnit.HOURS) .build(new CacheLoader<String, String>() { //默認的數據加載實現,當調用get取值的時候,如果key沒有對應的值,就調用這個方法進行加載. @Override public String load(String s) throws Exception { return "null"; } }); public static void setKey(String key,String value){ localCache.put(key,value); } public static String getKey(String key){ String value = null; try { value = localCache.get(key); if("null".equals(value)){ return null; } return value; }catch (Exception e){ logger.error("localCache get error",e); } return null; } }
package com.mmall.dao; import com.mmall.pojo.User; import org.apache.ibatis.annotations.Param; public interface UserMapper { int deleteByPrimaryKey(Integer id); int insert(User record); int insertSelective(User record); User selectByPrimaryKey(Integer id); int updateByPrimaryKeySelective(User record); int updateByPrimaryKey(User record); int checkUsername(String username); User selectLogin(@Param("username") String username, @Param("password")String password); int checkEmail(String email); String selectQuestionByUsername(String username); int checkAnswer(@Param("username")String username,@Param("question")String question,@Param("answer")String answer); }
<?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.mmall.dao.UserMapper" > <resultMap id="BaseResultMap" type="com.mmall.pojo.User" > <constructor > <idArg column="id" jdbcType="INTEGER" javaType="java.lang.Integer" /> <arg column="username" jdbcType="VARCHAR" javaType="java.lang.String" /> <arg column="password" jdbcType="VARCHAR" javaType="java.lang.String" /> <arg column="email" jdbcType="VARCHAR" javaType="java.lang.String" /> <arg column="phone" jdbcType="VARCHAR" javaType="java.lang.String" /> <arg column="question" jdbcType="VARCHAR" javaType="java.lang.String" /> <arg column="answer" jdbcType="VARCHAR" javaType="java.lang.String" /> <arg column="role" jdbcType="INTEGER" javaType="java.lang.Integer" /> <arg column="create_time" jdbcType="TIMESTAMP" javaType="java.util.Date" /> <arg column="update_time" jdbcType="TIMESTAMP" javaType="java.util.Date" /> </constructor> </resultMap> <sql id="Base_Column_List" > id, username, password, email, phone, question, answer, role, create_time, update_time </sql> <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer" > select <include refid="Base_Column_List" /> from mmall_user where id = #{id,jdbcType=INTEGER} </select> <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer" > delete from mmall_user where id = #{id,jdbcType=INTEGER} </delete> <insert id="insert" parameterType="com.mmall.pojo.User" > insert into mmall_user (id, username, password, email, phone, question, answer, role, create_time, update_time) values (#{id,jdbcType=INTEGER}, #{username,jdbcType=VARCHAR}, #{password,jdbcType=VARCHAR}, #{email,jdbcType=VARCHAR}, #{phone,jdbcType=VARCHAR}, #{question,jdbcType=VARCHAR}, #{answer,jdbcType=VARCHAR}, #{role,jdbcType=INTEGER}, now(), now()) </insert> <insert id="insertSelective" parameterType="com.mmall.pojo.User" > insert into mmall_user <trim prefix="(" suffix=")" suffixOverrides="," > <if test="id != null" > id, </if> <if test="username != null" > username, </if> <if test="password != null" > password, </if> <if test="email != null" > email, </if> <if test="phone != null" > phone, </if> <if test="question != null" > question, </if> <if test="answer != null" > answer, </if> <if test="role != null" > role, </if> <if test="createTime != null" > create_time, </if> <if test="updateTime != null" > update_time, </if> </trim> <trim prefix="values (" suffix=")" suffixOverrides="," > <if test="id != null" > #{id,jdbcType=INTEGER}, </if> <if test="username != null" > #{username,jdbcType=VARCHAR}, </if> <if test="password != null" > #{password,jdbcType=VARCHAR}, </if> <if test="email != null" > #{email,jdbcType=VARCHAR}, </if> <if test="phone != null" > #{phone,jdbcType=VARCHAR}, </if> <if test="question != null" > #{question,jdbcType=VARCHAR}, </if> <if test="answer != null" > #{answer,jdbcType=VARCHAR}, </if> <if test="role != null" > #{role,jdbcType=INTEGER}, </if> <if test="createTime != null" > now(), </if> <if test="updateTime != null" > now(), </if> </trim> </insert> <update id="updateByPrimaryKeySelective" parameterType="com.mmall.pojo.User" > update mmall_user <set > <if test="username != null" > username = #{username,jdbcType=VARCHAR}, </if> <if test="password != null" > password = #{password,jdbcType=VARCHAR}, </if> <if test="email != null" > email = #{email,jdbcType=VARCHAR}, </if> <if test="phone != null" > phone = #{phone,jdbcType=VARCHAR}, </if> <if test="question != null" > question = #{question,jdbcType=VARCHAR}, </if> <if test="answer != null" > answer = #{answer,jdbcType=VARCHAR}, </if> <if test="role != null" > role = #{role,jdbcType=INTEGER}, </if> <if test="createTime != null" > create_time = #{createTime,jdbcType=TIMESTAMP}, </if> <if test="updateTime != null" > update_time = now(), </if> </set> where id = #{id,jdbcType=INTEGER} </update> <update id="updateByPrimaryKey" parameterType="com.mmall.pojo.User" > update mmall_user set username = #{username,jdbcType=VARCHAR}, password = #{password,jdbcType=VARCHAR}, email = #{email,jdbcType=VARCHAR}, phone = #{phone,jdbcType=VARCHAR}, question = #{question,jdbcType=VARCHAR}, answer = #{answer,jdbcType=VARCHAR}, role = #{role,jdbcType=INTEGER}, create_time = #{createTime,jdbcType=TIMESTAMP}, update_time = now() where id = #{id,jdbcType=INTEGER} </update> <select id="checkUsername" resultType="int" parameterType="string"> select count(1) from mmall_user where username=#{username} </select> <select id="selectLogin" resultMap="BaseResultMap" parameterType="map"> SELECT -- *???//這樣真的好麽?答案就是,這樣不好. <include refid="Base_Column_List" /> from mmall_user where username = #{username} and password = #{password} </select> <select id="checkEmail" resultType="int" parameterType="string" > select count(1) from mmall_user where email = #{email} </select> <select id="selectQuestionByUsername" resultType="string" parameterType="string"> select question from mmall_user where username = #{username} </select> <select id="checkAnswer" resultType="int" parameterType="map"> SELECT count(1) from mmall_user where username=#{username} and question = #{question} and answer = #{answer} </select> </mapper>
獲取用戶登錄信息,忘記密碼,提示問題與答案,重置密碼功能開發