1.新知识
实现在原来的基础上,我们新学习了一个
ThreadLocal,具体用法在这里
,主要是用来线程隔离,这样的话,项目首页的的用户信息可以通过继承spring boot的HandlerInterceptor(登录拦截器接口)接口,在preHandle方法中来拦截请求
package com.hwx.Comp;
import com.auth0.jwt.interfaces.Claim;
import com.auth0.jwt.interfaces.DecodedJWT;
import com.hwx.Service.userS;
import com.hwx.join.user;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Iterator;
import java.util.List;
@Component
public class MyHand implements HandlerInterceptor {
@Autowired
private MyJWT jwt;
@Autowired
private userS userS;
@Autowired
private HostHand hostHand;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
Object token=request.getSession().getAttribute("token");
if(token!=null) {
DecodedJWT yanz = jwt.yanz(token.toString());
String name = yanz.getClaims().get("name").asString();
List<user> users = userS.GetUserName(name);
Iterator<user> iterator = users.iterator();
user user = iterator.next();
hostHand.setuser(user);
}else{
hostHand.clear();
}
// else {
// response.sendRedirect("/login");
// }
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
if(hostHand.getuser()!=null && modelAndView!=null){
user user=hostHand.getuser();
modelAndView.addObject("loginUser",user);
}
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
}
}
,判断请求中是否含有我们在session中的token,String s = jwt.GetJwt(map1); session.setAttribute("token",s);
,在postHandle方法中(这个方法必须在preHandle返回值为true时才会被调用),我们会将在preHandle方法中放入ThreadLocal中的user信息给到视图,这样就可以实现页面用户基本信息的携带
2 .错误
(1)在dao方法映射mapper文件时,当我带两个参数时,报错了,主要原因是没有带@Param注解
,导致找不到参数报错
(2)在前端专业选择上,连级的select标签,动态查询数据库,选择学校和专业上
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>志愿填报</title>
<script src="https://code.jquery.com/jquery-3.1.1.min.js" crossorigin="anonymous"></script>
<script src="js/target.js"></script>
<script>
function start(hh){
var sex=[[${loginUser.sex}]];
starttwo(hh,sex);
}
</script>
</head>
<body>
<form action="/volunteer/addtarget" method="post" th:if="${one}=='0'">
<div>
<label>考生信息:</label>
<a th:text="${loginUser.nameId}"></a><br>
<a th:if="${loginUser.sex}==0">理科</a>
<a th:if="${loginUser.sex}==1">文科</a>
</div>
<a>志愿一</a>
<!-- <select id="school1" οnclick="selectone()"> -->
<select id="school1" onclick="start(1)" name="school1">
<option>请选择学校</option>
</select>
<select id="specialty" name="specialty">
<option>请选择专业</option>
</select>
<br>
<br>
<a>志愿二</a>
<select id="school2" onclick="start(2)" name="school2">
<option>请选择学校</option>
</select>
<select id="specialty2" name="specialty2">
<option>请选择专业</option>
</select>
<br>
<br>
<a>志愿三</a>
<select id="school3" onclick="start(3)" name="school3">
<option>请选择学校</option>
</select>
<select id="specialty3" name="specialty3">
<option>请选择专业</option>
</select>
<br>
<br>
<a>志愿四</a>
<select id="school4" onclick="start(4)" name="school4">
<option>请选择学校</option>
</select>
<select id="specialty4" name="specialty4">
<option>请选择专业</option>
</select>
<br>
<br>
<a>志愿五</a>
<select id="school5" onclick="start(5)" name="school5">
<option>请选择学校</option>
</select>
<select id="specialty5" name="specialty5">
<option>请选择专业</option>
</select>
<br>
<input type="submit" value="提交" />
</form>
<form action="/volunteer/addresults" method="post" th:if="${one}=='1'">
<a>您已报考,请提交成绩!</a>
<a th:if="${class}==1">语文成绩:</a>
<a th:if="${class}==0">高数成绩:</a>
<input type="text" id="wz" name="wz" />
<br>
<a>政治成绩:</a>
<input type="text" name="zz" id="zz" />
<br>
<a>英语成绩:</a>
<input type="text" name="yy" id="yy" />
<br>
<a>计算机成绩:</a>
<input type="text" name="jsj" id="jsj" />
<br>
<input type="submit" value="提交成绩" />
</form>
<a th:if="${one}=='3'">成绩已提交,请等待公布考试结果!</a>
<div th:if="${one}=='4'">
<a>学校</a><a th:text="${schoolName}"></a>
<a th:text="${SpecialtyName}"></a>
</div>
</body>
</html>
function selectone(hh){
var school1=document.getElementById("school1").value;
if(school1!="请选择学校"){
}else{
$.ajax({
url:"/school/SchoolSelect",
type:"post",
success: function(data){
$("#school1").empty();
data.forEach(function(item,index){
$("#school1").append("<option οnclick='"+"selectone1("+hh+")'>"+item+"</option>");
});
}
});
}
}
function selectone1(hh){
var school1=document.getElementById("school1").value;
var specialty=document.getElementById("specialty").value;
if(school1!="请选择学校"){
if(specialty=="请选择专业"){
$.ajax({
url:"/volunteer/target",
type:"post",
data:{schoolname: school1,specialtyClass: hh},
success: function(twodata){
$("#specialty").empty();
twodata.forEach(function(i,t){
$("#specialty").append("<option>"+i+"</option>");
});
}
});
}
else{
$.ajax({
url:"/volunteer/target",
type:"post",
data:{schoolname: school1,specialtyClass: hh},
success: function(twodata){
$("#specialty").empty();
twodata.forEach(function(i,t){
$("#specialty").append("<option>"+i+"</option>");
});
}
});
}
}else{
alert("请先选择学校");
}
}
这里最终还是没有解决当第一次查询后,选择完毕之后,又会重新刷新,最后自己通过判断值有没有变化来刷新。
3.还需要加强的知识
1.jwt
2.事务处理
3.shiro