发表于: 2017-07-25 22:54:04

2 943


今天完成的事:

       学习Cookie的生成和内容提取,修改原先的代码,贴一下效果图

                     进入主页右上角是登录和注册

这时点击职业会弹出 登录/注册 页面,注册就不贴了之前贴过了

       

           点击登录

            点击返回主页

                             然后点击凡尘个人信息,没写

                               然后点击职业


                      为了便于测试,cookie的生存时间设置为60秒所以60秒过后cookie就会失效,就需要重新登录

    public static void addCookie(HttpServletResponse response,String name,String value){
Cookie cookie = new Cookie(name,value);
//        代表所有页面都可以使用该Cookie
       cookie.setPath("/");
//        存活时间
       cookie.setMaxAge(60);
       response.addCookie(cookie);
   }

 放一下控制器类

 @RequestMapping(value = "/", method = RequestMethod.GET)
public String getAll(HttpServletResponse response,HttpServletRequest request,Model model) throws Exception {
List<Category> cs = categoryMapper.getAll();
       List<Student> s = categoryMapper.getPp();

       Cookie cokLoginName = CookieUtil.getCookieByName(request, "secretName");
       Cookie cokLoginDate = CookieUtil.getCookieByName(request, "secretDate");
       if (cokLoginDate!=null&&cokLoginName!=null){
           String secretName = cokLoginName.getValue();
           String secretDate = cokLoginDate.getValue();
           String secretKey = "12345678";
           String userName = DesUtil.decryption(secretName, secretKey);
           String loginDate = DesUtil.decryption(secretDate, secretKey);
           model.addAttribute("username",index+userName+end);
           model.addAttribute("reg_quit",quit);
           return "index";
       }
       int a = 0;
       for (Student student : s) {
       a = a + student.getPp_number();
       }
       model.addAttribute("s", a);
       model.addAttribute("cs", cs);
       model.addAttribute("username",denglu);
       model.addAttribute("reg_quit",reg);
       return "index";
   }

@RequestMapping(value = "/profession", method = RequestMethod.GET)
public String goM() {
       return "profession";
   }

@RequestMapping(value = "/register", method = RequestMethod.GET)
public String register() {
       return "register";
   }

//注册
   @RequestMapping(value = "/ok", method = RequestMethod.POST)
public String ok(HttpServletRequest request, HttpServletResponse response, Model model) throws Exception {
       request.setCharacterEncoding("UTF-8");
       String username = request.getParameter("username");
       String email = request.getParameter("email");
       String password = request.getParameter("password");

       if (categoryMapper.getMP(email) != null) {
       Register register = categoryMapper.getMP(email);
           if (register.getUsername().equals(username)) {
       model.addAttribute("name_error", name_error);
               return "register";
           }
       model.addAttribute("email_error", email_error);
           return "register";
       }
       Register register = new Register();
       register.setUsername(username);
       register.setEmail(email);
       register.setPassword(password);
       categoryMapper.register(register);
       model.addAttribute("name", username);
       return "ok";
   }

//登录
@RequestMapping(value = "/login", method = RequestMethod.POST)
public String login(HttpServletRequest request, HttpServletResponse response, Model model) throws IOException, ServletException, NullPointerException {
       String key = "12345678";
       String email = request.getParameter("email");
       String password = request.getParameter("password");
              //设置日期格式
       SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
       try {
               //获取email相对的对象
               Register reg = categoryMapper.getMP(email);
               //密码相同则添加Cookie
               if (reg.getPassword().equals(password)) {
               //加密当前时间
               String value = DesUtil.encryption(df.format(new Date()), key);
               //加密用户名
               String name = DesUtil.encryption(reg.getUsername(), key);
               // 添加Cookie
               CookieUtil.addCookie(response, "secretName", name);
               CookieUtil.addCookie(response, "secretDate", value);
               //发送成功信息
               model.addAttribute("success", success);
               return "ok";
           } else {
               model.addAttribute("failure", failure);
               return "register";
           }
       } catch (NullPointerException e) {
               model.addAttribute("failure", failure);
               return "register";
       } catch (Exception e) {
              System.out.println("登录出错了,加密出错");
               return "register";
       }
}

@RequestMapping(value = "/quit",method = RequestMethod.GET)
public String quit(){
               return "none";
   }
}

  拦截器类

public class LoginInterceptor implements HandlerInterceptor {

          /**拦截处理程序的执行,在HandlerMapping调用之后,但在HandlerAdapter调用之前*/
   public boolean preHandle(HttpServletRequest request,HttpServletResponse response, Object handler) throws Exception {

       System.out.println("启动拦截器,判断是否放行");

          /**直接获取cookie,有就判断是否匹配,没有就跳转到登陆页面*/
       Cookie cokLoginName = CookieUtil.getCookieByName(request, "secretName");
       Cookie cokLoginDate = CookieUtil.getCookieByName(request, "secretDate");

           /**如果Cookie不为空*/
       if (cokLoginName != null && cokLoginDate != null && cokLoginName.getValue() != null && cokLoginDate.getValue() != null) {
           /**获取两个Cookie的具体内容*/
           String secretName = cokLoginName.getValue();
           String secretDate = cokLoginDate.getValue();
           /**解密*/
           String secretKey = "12345678";
           String userName = DesUtil.decryption(secretName, secretKey);
           String loginDate = DesUtil.decryption(secretDate, secretKey);
           /**如果不为null说明解密成功是cookie*/
           boolean result; // 判断 cookie是否匹配
           if (userName != "" && loginDate != "") {
               result = true;
           }
else {
           response.sendRedirect("register");
               result = false;
           }

            return result;

       } // 获取不到浏览器cookie则跳转到登陆页面
       else {
           response.sendRedirect("register");
           return false;
       }
}

            /**拦截处理程序的执行,在HandlerAdaoter调用之后,但在DispatcherServlet呈现视图之前*/
   public void postHandle(HttpServletRequest request, HttpServletResponse response,Object handler, ModelAndView modelAndView) throws Exception {}

            /**请求处理完成后的回调,即在视图渲染之后,可用于清理资源*/
   public void afterCompletion(HttpServletRequest arg0,HttpServletResponse arg1, Object arg2, Exception arg3) throws Exception {}

}

Cookie类

public class CookieUtil {

//        接口方式设置cookie
   public static void addCookie(HttpServletResponse response,String name,String value){
Cookie cookie = new Cookie(name,value);
//        代表所有页面都可以使用该Cookie
       cookie.setPath("/");
//        存活时间
       cookie.setMaxAge(60);
       response.addCookie(cookie);
   }

//        获取cookie
   public static Cookie getCookieByName(HttpServletRequest request,String name){
//        拿到cookie的内容
       Map<String,Cookie> cookieMap = ReadCookieMap(request);
//        拿到cookie的名字
       if(cookieMap.containsKey(name)){
       Cookie cookie = (Cookie)cookieMap.get(name);
           return cookie;
       }else{
       return null;
       }
}

//将cookie封装到Map(非接口)
   private static Map<String,Cookie> ReadCookieMap(HttpServletRequest request){
       Map<String,Cookie> cookieMap = new HashMap<String,Cookie>();
       Cookie[] cookies = request.getCookies();
       if(null!=cookies){
for(Cookie cookie : cookies){

       cookieMap.put(cookie.getName(), cookie);

           }

}
       return cookieMap;
   }

}

        源码有需要的留邮箱

         服务器不知道怎么回事被暂停了,正在问淘宝卖家,下次不在他家买了

遇到的困难:

        设置cookie遇到点问题,name和value我还以为前面写用户名后面写时间,后来一直抛异常,因为设置了try catch所以直接找到出问题的地方并解决

收获: 

        学会设置cookie,复习了一下tiles


明天的计划:

         学习Task6


返回列表 返回列表
评论

    分享到