單點登入ajax傳送jsonp請求
阿新 • • 發佈:2018-11-13
jquery
<script type="text/javascript">
$(function () {
var ticket = $.cookie("DN_TICKET");
$.ajax({
type:"post",
url:"http://sso.ajstore.com/checkLoginJsonP.html",
dataType:"jsonp",
jsonp:"callback" ,
success:function(result){
var user = result.data;
console.log(result);
if (result.status === 200) {
$("#iul").append('<li><a href="/lookforward.html">'+user.username+'</a><b>|</b></li><li><a href="javascript:;" onclick="logout()">退出</a></li>' );
}else if(result.status === 500){
$("#iul").append('<li><a href="http://sso.ajstore.com/toLogin.html">登入</a></li>');
}
},
error:function(textStatus,XMLHttpRequest){
alert("系統異常!" +JSON.stringify(textStatus)+" ------ "+XMLHttpRequest);
}
});
})
</script>
伺服器端
@RequestMapping("/checkLoginJsonp")
@ResponseBody
public void checkLoginJsonp(HttpServletRequest request, HttpServletResponse response, String callbackFunctionName) throws IOException{
PrintWriter out = response.getWriter();
//獲取ticket
String ticket=CookieUtils.getCookieValue(request, "AJSTORE-TICKET");
if(ticket==null){
AjiaResult result = AjiaResult.build(500, "未登入");
String returnStr = callbackFunctionName+"("+JsonUtils.objectToJson(result)+")";
out.write(returnStr);
out.close();
return;
}
//取redis中尋找使用者
Jedis jedis = jedisUtils.getJedis();
String userJson = jedis.hget(ticket, "SESSION_USER");
if(userJson==null){
AjiaResult result = AjiaResult.build(500, "未登入");
String returnStr = callbackFunctionName+"("+JsonUtils.objectToJson(result)+")";
out.write(returnStr);
out.close();
return;
}
//又需要用到這個使用者,我們需要把redis中該ticket的生存時間重置為30分鐘
jedisUtils.expire(ticket);
AjiaUser user = JsonUtils.jsonToPojo(userJson, AjiaUser.class);
AjiaResult result = AjiaResult.ok(user);
String returnStr = callbackFunctionName+"("+JsonUtils.objectToJson(result)+")";
out.write(returnStr);
out.close();
}