发表于: 2017-11-21 20:50:21
1 603
今天完成的任务
修改dao语句
不使用list的话,如果数据库中没数据的话程序会报错
service层
public User getUserFromName(User user){
List<User> getUser=userMapper.getUserFromName(user);
if(getUser.size()!=1){
return new User();
}else{
return getUser.get(0);
}
------------------------------------------------------
因为写代码写的太欢脱了,没有及时写日报
现在除了验证状态和退出登陆都已经写完了,下附代码
controller层
@Controller
@RequestMapping(value = "",method = RequestMethod.GET)
public class CategoryController {
@Autowired
@SuppressWarnings("SpringJavaAutowiringInspection")
private UserService userService;
@Autowired
@SuppressWarnings("SpringJavaAutowiringInspection")
private PersistentLoginsService persistentLoginsService;
/**
*注册页面
* @param
* @return
*
* 仅作登陆页面的载体并不提供内置方法
*/
@RequestMapping(value = "/logon", method = RequestMethod.GET)
public ModelAndView UserLogon(User user) {
ModelAndView mAndView = new ModelAndView("userLogon");
return mAndView;
}
/**
*生成cookie页面
* @param user 用户的数据
* @param response cookie
* @return
*
* 判断UserLogon方法中的user的数据是否记录在数据库中
* 依此判断是否生成cookie
*
*/
@RequestMapping(value = "/getLogon", method = RequestMethod.POST)
public ModelAndView getUserLogOn(User user,HttpServletResponse response) {
if (user.getName() != null && user.getPassword() != null & user.getName().length() != 0 && user.getPassword().length() != 0) {//不能为空数据
PersistentLogins p=persistentLoginsService.getUserFromName(user.getName());//获取卡密信息
String userMD5=AppMD5Util.getMD5(user.getName(),user.getPassword());
if (p.getToken().equals(userMD5)) {
CookieUtils.addCookie(user,userMD5,response);
return new ModelAndView("successLogon");
}else{
return new ModelAndView("failLogon");
}
}else{
return new ModelAndView("failLogon");
}
}
/**判定页面
* 检测如果cookie的值与用户的值相同的话
*/
@RequestMapping(value = "/ok", method = RequestMethod.GET)
public ModelAndView test(User user, HttpServletRequest request, HttpServletResponse response) {
List<PersistentLogins> p=persistentLoginsService.list();
if( CookieUtils.getCookie(p,request)){
return new ModelAndView("testLogon");
}
return new ModelAndView("failLogon");
}
/**
* 注册页面的载体
* @param user
* @return
*/
@RequestMapping(value = "/register", method = RequestMethod.GET)
public ModelAndView userRegister(User user){
return new ModelAndView("userRegister");
}
/**
* controller层只负责判断输入的是否为空数据
*
* @param user
* @return
*/
@RequestMapping(value = "/getRegister", method = RequestMethod.POST)
public ModelAndView userGetRegister(User user){
//检测是否为空为null
if (user.getName() != null && user.getPassword() != null && user.getEmail()!=null & user.getName().length() != 0 && user.getPassword().length() != 0 && user.getEmail().length()!=0 ) {
//检测输入的账号是否重复
User userProofread = userService.getUserFromName(user);
if (user.getName().equals(userProofread.getName())) {
return new ModelAndView("failLogon");
}else{
userService.addUser(user);
return new ModelAndView("successRegister");
}
}else{
return new ModelAndView("failLogon");
}
}
}
service层
@Service
public class PersistentLoginsServiceImpl implements PersistentLoginsService {
@Autowired
@SuppressWarnings("SpringJavaAutowiringInspection")
PersistentLoginsMapper persistentLoginsMapper;
public List<PersistentLogins> list(){
return persistentLoginsMapper.list();
}
/**
*
* 获得用户输入的数据并加密
* @param user
* @return
*/
public int addPersistent_logins(User user){
PersistentLogins p=new PersistentLogins();
p.setUsername(user.getName());
String a=AppMD5Util.getMD5(user.getName(),user.getPassword());
System.out.println(a);
p.setToken(a);
return persistentLoginsMapper.addPersistent_logins(p);
}
public PersistentLogins getUserFromName(String username){
List<PersistentLogins> getPersistentLogins= persistentLoginsMapper.getUserFromName(username);
if(getPersistentLogins.size()!=1){
return new PersistentLogins();
}else{
return getPersistentLogins.get(0);
}
}
public PersistentLogins verifyUserFromName(String username){
List<PersistentLogins> getPersistentLogins= persistentLoginsMapper.verifyUserFromName(username);
if(getPersistentLogins.size()!=1){
return new PersistentLogins();
}else{
return getPersistentLogins.get(0);
}
}
}
@Service
public class UserServiceImpl implements UserService {
@Autowired
@SuppressWarnings("SpringJavaAutowiringInspection")
UserMapper userMapper;
@Autowired
PersistentLoginsServiceImpl persistentLoginsServiceImpl;
public List<User> list(){
return userMapper.list();
}
/**
* 注册所使用的
*/
public int addUser(User user){
user.setBirthday(unit.getCreationTime());//获取记录时间
persistentLoginsServiceImpl.addPersistent_logins(user);//将用户信息加密后输入到另一表中
return userMapper.addUser(user);
}
/**
* 若表中此用户不唯一则返回null
* @param user
* @return
*/
public User getUserFromName(User user){
List<User> getUser=userMapper.getUserFromName(user);
if(getUser.size()!=1){
return new User();
}else{
return getUser.get(0);
}
}
}
加密
public class AppMD5Util {
final static String USERKEY = "123456";
/**
* 对字符串md5加密(小写+字母)
*
* @param str 传入要加密的字符串
* @return MD5加密后的字符串
*/
public static String MD5(String str) {
try {
// 生成一个MD5加密计算摘要
MessageDigest md = MessageDigest.getInstance("MD5");//返回实现指定摘要算法的 MessageDigest 对象。
// 计算md5函数
md.update(str.getBytes());
//update使用指定的byte更新摘要
//getBytes函数是将一个字符串转化为一个字节数组byte[]的方法
// digest()最后确定返回md5 hash值,返回值为8为字符串。因为md5 hash值是16位的hex值,实际上就是8位的字符
// BigInteger函数则将8位的字符串转换成16位hex值,用字符串来表示;得到字符串形式的hash值
return new BigInteger(1, md.digest()).toString(16);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
public static byte[] getSALT() {
SecureRandom a = new SecureRandom();
return a.generateSeed(1);
}
public static String getMD5(String str,String str_) {
return MD5(MD5(str) +MD5(str_) +USERKEY);
}
}
cookie
public class CookieUtils {
public static void addCookie(User user, String userMD5, HttpServletResponse response) {
Cookie cookie = new Cookie(user.getName(), userMD5);
cookie.setMaxAge(COOKIE_MAX_AGE);//设置周期
response.addCookie(cookie);
}
/**
* 这个地方做的不好,居然用的是最蠢笨的遍历,而且这个地方bug太明显了
*
* @param p
* @param request
* @return
*/
public static boolean getCookie(List<PersistentLogins> p, HttpServletRequest request) {
boolean userVerification = false;
Cookie[] cookies = request.getCookies();//获取cookie
for (Cookie cookie : cookies) {
for (PersistentLogins persistentLogins : p) {
if (persistentLogins.getUsername() == cookie.getName() & persistentLogins.getToken() == cookie.getValue()) {
userVerification = true;
}
}
}
return userVerification;
}
}
遇到的问题
关于
验证状态
理论上登陆一个页面判断用户是否已经登录首先是获取cookie与数据库内的做比对
这方法我遇到了一点小问题
一个网站的cookie是复数的,如果使程序能够得知哪一个是我们需要获取做比对的cookie
请师兄指导一下
遇到的问题
收获
评论