发表于: 2017-10-27 23:34:40
1 723
今天完成的事情:
1.session是随着动态页面的生成而产生的也就是你打开首页就会生成一个session,它随着浏览器的关闭而消失
实现思路:第一次登录之后我会在本地浏览器里留下一个cookie,cookie的有效期是5个小时(也就是说5个小时之内这个cookie一直存在.然后当我第二次打开网页输入localhost:8080/home时,他会去执行我这个url下的方法,这个时候我首先判断这个cookie里面有没有我指定的名字为Token的cookie,假如存在,就代表着我已经登录成功,我可以进行如何操作了.因为我这个时候登录成功,我就要更新我的登录时间login_at,并且更新我的Token.为了我判断方便,不用每次都把cookie全都提出来遍历,我向jsp内置对象session内赋值(session作用的是这个会话,只要的浏览器不关闭都有用).我以后每次想进入限制的网页.直接判断session符不符合就行了.贴一下代码
public String home(Model model,HttpServletRequest request,HttpSession session,HttpServletResponse response) throws ServletException, IOException {
model.addAttribute("allStudent", studentService.allStudentNum());
model.addAttribute("allGraduates", studentService.allGraduateNum());
model.addAttribute("excellentStudents", studentService.getExcellentStudents());
Cookie[] cookies=request.getCookies();
for(int i=0;i<cookies.length;i++){
if (cookies[i].getName().equals("Token")) {
DesUtil des = new DesUtil("JAVA");
String Token = cookies[i].getValue();
String decToken = des.decrypt(Token);
String[] uls = decToken.split(",");
java.util.Date dt = new Date();
long info_id=Long.parseLong(infoid);
session.setAttribute("infoidloginat" ,info_id+""+login_at);
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object o) throws Exception {
HttpSession session=request.getSession();
if(session==null||session.getAttribute("infoidloginat")==null){
response.sendRedirect("/jsp/login.jsp");
因为要在页面上点击注销按钮实现删除cookie和session
cookie没有删除功能,只能将他的maxage设置为0,就相当于删除了cookie了具体操作将代码
还有要将cookie的路径设置为"./"要不然假如路径不一样的话,他会直接重新新建一个maxage为0的token,就删除不了原来的cookie了
@RequestMapping(value = "/u/logout")
public String logout(HttpServletRequest request,HttpServletResponse response){
Cookie[] cookies=request.getCookies();
for(int i=0;i<cookies.length;i++){
if(cookies[i].getName().equals("Token")){
response.addCookie(cookies[i]);
request.getSession().removeAttribute("infoidloginat");
5.拦截器重定向问题就不能写成这样了,因为只有现在路径是String类型的,那么它跳转时也是这样的.
if(session==null||session.getAttribute("infoidloginat")==null){
response.sendRedirect(request.getContextPath()+"/jsp/login.jsp");
<c:when test="${loginLoginInfo!=null}">
<div class="login" style="position:absolute; left:1160px; top:10px; ">${loginLoginInfo.info_user}</div>
<div class="login" style="position:absolute; left:1190px; top:10px; "><a href="${pageContext.request.contextPath}/home/u/logout" style="text-decoration:none">注销</a></div>
<div class="" style="position:absolute; left:1220px; top:10px; "><a href="${pageContext.request.contextPath}/home/u/studentes" style="text-decoration:none">学员列表</a></div>
<div class="" style="position:absolute; left:1280px; top:10px; "><a href="${pageContext.request.contextPath}/home/student" style="text-decoration:none"><img width="50" height="50" src=${pageContext.request.contextPath}${StudentPicture} ></a></div>
<div class="login" style="position:absolute; left:1160px; top:10px; "><a href="${pageContext.request.contextPath}/jsp/login.jsp" style="text-decoration:none">登录</a></div>
<div class="|" style="position:absolute; left:1190px; top:10px; ">|</div>
<div class="" style="position:absolute; left:1200px; top:10px; "><a href="${pageContext.request.contextPath}/jsp/register.jsp" style="text-decoration:none">注册</a></div>
<div class="" style="position:absolute; left:1280px; top:10px; "> <img width="50" height="50" src=${pageContext.request.contextPath}/image/home/logout.jpg ></div>
原因:我在本地用的是相对路径,前面有两个点,把表上传到服务器没删除,后来我用绝对路径的时候,路径就报错了
评论