发表于: 2017-10-25 23:55:06

1 747


今天完成的任务:

1.任务四的收尾工作。。。

将项目风格设计成web,然后发布到服务器。结果tag标签出了点问题,开始以为是因为的的web容器用的不同,所以出问题,后来发现是因为没有一个<short-name></short-name>标签,加上以后就可以了。

2.了解一下任务五需要做的事情。

学习cookiesessionrequest常用方法。

两种加密方式。

使用上面两种方法对登录界面。进行修改。

暂时就先这三件事,后面了解到了继续做。

3。先学习cookiesession的概念。

sessioncookie都是会话跟踪的技术,不同的是cookie是用在客户端,session是用在服务器端。为什么需要会话跟踪?因为http协议是无状态的,一旦完成了数据的交换,连接就会断开,三次握手和四次挥手,那么再一次的进行数据交换就要再去建立连接,这样的话上一次的会话就不能与下一次的会话建立联系不能确定是同一个用户进行的操作(避免了重复登录,可以看做浏览器缓存),所以需要有一个机制来联系会话,就是cookiesession

首先说cookie

Cookie实际上是一小段的文本信息。客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。服务器还可以根据需要修改Cookie的内容。

  再说session

Session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而Session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。这就是Session。客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了。这种方法比cookie更加安全,但是相应的增加了服务器的压力。

session的实现:

Session机制是一种服务端的机制,服务器使用一种类似散列表的结构来保存信息。当程序需要为某个客户端的请求创建一个session的时候,服务器首先检查这个客户端里的请求里是否已包含了一个session标识--sessionID,如果已经包含一个sessionID,则说明以前已经为此客户端创建过session,服务器就按照sessionID把这个session检索出来使用(检索不到,可能会新建一个),如果客户端请求不包含sessionID,则为此客户端创建一个session并且声称一个与此session相关联的sessionIDsessionID的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串(服务器会自动创建),这个sessionID将被在本次响应中返回给客户端保存。

参考:

http://blog.csdn.net/fangaoxin/article/details/6952954

4.概念知道了现在要实现以下使用cookiesession方法的登录。

首先先配置拦截。

<mvc:interceptors>
    <
mvc:interceptor>
        <
mvc:mapping path="/base"/>
        <bean
class="comNaNteng.util.SimpleInterceptor"/>
    </
mvc:interceptor>
</
mvc:interceptors>

这里是需要拦截base,就是登录成功后跳转的界面。需要使用拦截器来判断是否有cookie,如果没有就添加进去,如果有就不用登录界面直接跳转到成功。

我使用cookie的目的就是实现自动登录以及在没有cookie的时候不允许直接访问success,如果有cookie才可以进入成功界面,如果没有跳转到登录界面,去检查账号密码是否正确然后添加到cookie

 

怎么添加呢?添加cookie的方法写在Controller中,下面是登录界面的controller,增加cookie的方法写在这里。

@RequestMapping(value = "/loginIn",method = RequestMethod.GET)
public String login(HttpServletRequest request, HttpServletResponse response,
                   
String username)throws NoSuchAlgorithmException,UnsupportedEncodingException{
       
if (username.equals("admin")){
           
//新增cookie
               
Cookie cookie1 =new Cookie("usr","admin");
                
cookie1.setMaxAge(20*60);//设置在20min之内有效,不设置的话就是当前页面有效。
               
cookie1.setPath("/base");//定义在访问base路径的时候带上cookie
               
response.addCookie(cookie1);
               
request.getSession().setAttribute("usr","admin");
                
}
       
else return "login";
       return
"success";//判断完成后跳转到成功界面
}

 

最后需要写拦截方法:

public class SimpleInterceptor implements HandlerInterceptor{
   
public boolean preHandle(HttpServletRequest request, HttpServletResponse response,Object handler)throws Exception{
        System.
out.println("yidaoda");
        if
(!Judge(request)){
        request.getRequestDispatcher(
"/login").forward(request,response);
   
}
   
return true;
}

   
@Override
   
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
    }
public void afterCompletion(HttpServletRequest request,HttpServletResponse response,Object handler,Exception e)throws Exception{
}
public boolean Judge(HttpServletRequest request){
           
for(Cookie cookie:request.getCookies()) {
                   
if (cookie.getName().equals("usr")) {
                System.
out.println("cookie找到了");
               
System.out.println("cookie的值是" + cookie.getValue());
               
System.out.println(request.getSession().getAttribute("usr") + "以上为session内容");
     if
(cookie.getValue().equals(request.getSession().getAttribute("usr")))
                   
return true;
                else
                    return false;
           
}
        }
       
return false;
}
}

 

这样的话就可以首先判断是否有需要的cookie,没有cookie就返回false,有的话然后再去判断是不是和session中保存的一直,如果一直就可以进入成功界面,不一致就返回到指定的登录界面。

 

最后运行之后的结果是在当前的页面输入用户名之后可以进入success,另外可以不输入用户名直接访问success。但是在当前页面关闭之后就不能直接访问success,因为cookie设置的是只有这个页面有效。如果使用cookie1.setMaxAge(20*60);设置时间就可以在一段时间内有效。

明天的计划:

明天计划学习http请求request和拦截器

遇到问题:

刚刚学习cookie很多不懂,基础知识为0.。。

收获:

终于实现了一个小的demo。现在已经2点半。。。

禅道:

明天拆。



返回列表 返回列表
评论

    分享到