发表于: 2017-11-13 23:51:47
1 916
今天完成的事情:
今晚完善了项目,基本符合任务要求。
任务要求,需要登录的页面路径加/u
controller:
拦截器
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
boolean falg = false;
String token = ServletCookie.getCookie(request, "token");
System.out.println("拦截器中的token "+token);
//判断非空
if(token!=null && token.length()>0){
//解密
desUtil.setKey(paskey);
desUtil.setDesString(token);
String strM = desUtil.getStrM();
String[] split = strM.split(",");
User user = new User();
user.setId(split[0]);
user.setCreate_date(Long.parseLong(split[1]));
User byToken = serviceI.findByToken(user);
if(byToken!=null){
falg = true;
}
}else{
response.sendRedirect(request.getContextPath()+"/comeinIndex");
}
return falg;
}
springMVC配置文件:
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/u/*"/>
<bean class="com.jnshu.interceptor.UserInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
没有登录的话,进拦截器指定的路径,是会拦截的。
@RequestMapping("/comeinIndex")
public String comeinIndex(HttpServletRequest request){
request.getSession().setAttribute("msg","抱歉,您当前未登录,请先登录。");
return "errlogin";
}
明天验收时,再一一演示吧。
再来看一下,小课堂中的知识,cookie和session。
cookie 和session 的区别:
1、cookie数据存放在客户的浏览器上,session数据放在服务器上。
2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗考虑到安全应当使用session。
3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能考虑到减轻服务器性能方面,应当使用COOKIE。
4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
在建立cookie之后,可以在访问网页中看到cookie,F12开发者模式。或者使用PostMan来测试。
cookie的常用属性:
属 性 名 | 描 述 |
String name | 该Cookie的名称。Cookie一旦创建,名称便不可更改 |
Object value | 该Cookie的值。如果值为Unicode字符,需要为字符编码。如果值为二进制数据,则需要使用BASE64编码 |
int maxAge | 该Cookie失效的时间,单位秒。如果为正数,则该Cookie在maxAge秒之后失效。如果为负数,该Cookie为临时Cookie,关闭浏览器即失效,浏览器也不会以任何形式保存该Cookie。如果为0,表示删除该Cookie。默认为–1 |
boolean secure | 该Cookie是否仅被使用安全协议传输。安全协议。安全协议有HTTPS,SSL等,在网络上传输数据之前先将数据加密。默认为false |
String path | 该Cookie的使用路径。如果设置为“/sessionWeb/”,则只有contextPath为“/sessionWeb”的程序可以访问该Cookie。如果设置为“/”,则本域名下contextPath都可以访问该Cookie。注意最后一个字符必须为“/” |
String domain | 可以访问该Cookie的域名。如果设置为“.google.com”,则所有以“google.com”结尾的域名都可以访问该Cookie。注意第一个字符必须为“.” |
String comment | 该Cookie的用处说明。浏览器显示Cookie信息的时候显示该说明 |
int version | 该Cookie使用的版本号。0表示遵循Netscape的Cookie规范,1表示遵循W3C的RFC 2109规范 |
今天小课堂存在的问题在于,不应该直接把cookie传到jsp页面,并不能直接过得cookie里面的值,在方法里拿到值,然后传递到页面。
@RequestMapping("/mytest")
public class TestControler {
@Autowired
private ServiceI serviceI;
private Logger logger = Logger.getLogger(ListController.class);
// 登录功能 创建cookie 将信息放进去
@RequestMapping(value = "/login",method = RequestMethod.GET)
public String login(User user, HttpServletResponse response, HttpServletRequest request){
logger.info("user: -----"+user);
User user1 = serviceI.checklogin(user);
logger.info("user1: -----"+user1);
if(user1!=null){
String username = user.getUsername();
Cookie cookie = new Cookie("username",username);
cookie.setValue(username);
cookie.setMaxAge(60*60); //设置过期时间为1小时
response.addCookie(cookie);
HttpSession session = request.getSession();
// session.setAttribute("cookie",username);
session.setAttribute("mes","<br>Set Cookie Success!<br>");
// modelMap.addAttribute("cookie",cookie);
}
return "error";
}
// 再次进入登录页面 将username值单独传过去
@RequestMapping(value = "/come",method = RequestMethod.GET)
public String login(HttpServletRequest request,Model model){
Cookie[] cookies = request.getCookies();
for (Cookie cookie: cookies )
{
if(cookie.getValue().length()<10){
String value = cookie.getValue();
model.addAttribute("value",value);
}
}
return "success";
在jsp页面使用el表达式就可以拿到登录使用的username。
遇到的问题:
有遇到写sql语句少加一个字母报错的,有遇到400的错误请求。
收获:
任务五是差不多完成,不过还需要明天修正一天,做一个退出,再好好跟师兄聊一下,哪里再需要补充,明天计划完成任务五后序,初步接触任务六。不过今天先提交了,明天验收。
评论