发表于: 2017-11-22 23:08:28
1 658
今天完成的任务
完成了做一个登陆需要的全部操作
/**
* 注册页面的载体
* @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");
}
}
注册
@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());//获取卡密信息,这句话得修改?
if(user.getName()!=null) {
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");}
}else{
return new ModelAndView("failLogon");
}
}
登录
@RequestMapping(value = "/quit", method = RequestMethod.GET)
public ModelAndView userQuit(User user, HttpServletRequest request, HttpServletResponse response) {
CookieUtils.delCookie(response,CookieUtils.getRootCookie(request));
return new ModelAndView("testLogon");
}
退出
检验
/**判定页面
* 检测如果cookie的值与用户的值相同的话
*/
@RequestMapping(value = "/test/u", method = RequestMethod.GET)
public ModelAndView test(User user, HttpServletRequest request, HttpServletResponse response) {
return new ModelAndView("testLogon");
}
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**/u"/>
<bean class="com.task.interceptor.LoginInterceptor" />
</mvc:interceptor>
</mvc:interceptors>
这里写了一个拦截/**/u界面的拦截器
拦截方法如下
/**
* 用于在登录前验证 _csrf 参数
* */
@Autowired
@SuppressWarnings("SpringJavaAutowiringInspection")
private PersistentLoginsService persistentLoginsService;
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
Cookie cookie= CookieUtils.getRootCookie(request);
if(cookie!=null){
if(persistentLoginsService.verifyUserFromtoken(cookie.getValue())) {
System.out.println(persistentLoginsService.verifyUserFromtoken(cookie.getValue()));
return true;
}else {
response.setContentType("text/html;charset=utf-8");
response.setStatus(403);
OutputStream oStream = response.getOutputStream();
oStream.write("无效的登陆!!!".getBytes("UTF-8"));
return false;
}
}else{
response.setContentType("text/html;charset=utf-8");
response.setStatus(403);
OutputStream oStream = response.getOutputStream();
oStream.write("先登陆!!!".getBytes("UTF-8"));
return false;
}
}
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
super.afterCompletion(request, response, handler, ex);
}
}
很简单的判断
两个if一个是检验cookie中的密文与数据库记录的是否相同,另一个是检验有没有这个cookie
至于如何检验cookie中的密文与数据库记录的是否相同,我这里使用的方法简直烂爆了
我用的是再调取一遍存放密文的表,看看表中是否有这个密文
public boolean verifyUserFromtoken(String token) {
List<PersistentLogins> persistentLogins = persistentLoginsMapper.verifyUserFromtoken(token);
System.out.println(persistentLogins.size());
System.out.println(persistentLogins);
if (persistentLogins.size() != 0) {
return true;
} else {
return false;
}
太慢,但是我又没啥好的方法
service层
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);
}
}
public boolean verifyUserFromtoken(String token) {
List<PersistentLogins> persistentLogins = persistentLoginsMapper.verifyUserFromtoken(token);
System.out.println(persistentLogins.size());
System.out.println(persistentLogins);
if (persistentLogins.size() != 0) {
return true;
} else {
return false;
}
}
}
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);
}
}
}
cookie的操作
public class CookieUtils {
/**
*
* @param user
* @param userMD5
* @param response
*/
public static void addCookie(User user, String userMD5, HttpServletResponse response) {
Cookie cookie = new Cookie("user", userMD5);
cookie.setMaxAge(COOKIE_MAX_AGE);//设置周期
response.addCookie(cookie);
}
/*
*/
public static void delCookie(HttpServletResponse response, Cookie cookie) {
if (cookie != null) {
cookie.setPath("/");
cookie.setMaxAge(0);
cookie.setValue(null);
response.addCookie(cookie);
}
}
/**
* 返回cookie
*
* @param
* @param request
* @return
*/
public static Cookie getRootCookie(HttpServletRequest request) {
Cookie[] cookies = request.getCookies();//获取cookie
for (Cookie c : cookies) {
if (c.getName().equals("user"))
return c;
}
return null;
}
}
cookie默认是存放一个月的
有一个小问题
任务四是用tiles做的
这一部分是其中的一个页面
请问这一部分该如何通过判定cookie的不同来显示不同的页面
评论