Intercepter类
package com.china.bill.java.Intercepter;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import net.sf.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import com.china.bill.java.entity.User;
/**
* 在业务处理器处理请求之前被调用
* 如果返回false
* 从当前的拦截器往回执行所有拦截器的afterCompletion(),再退出拦截器链
* 如果返回true
* 执行下一个拦截器,直到所有的拦截器都执行完毕
* 再执行被拦截的Controller
* 然后进入拦截器链,
* 从最后一个拦截器往回执行所有的postHandle()
* 接着再从最后一个拦截器往回执行所有的afterCompletion()
*/
public class LoginHandlerIntercepter implements HandlerInterceptor {
private static Logger log = LoggerFactory.getLogger(LoginHandlerIntercepter.class);
public void afterCompletion(HttpServletRequest arg0,
HttpServletResponse arg1, Object arg2, Exception arg3)
throws Exception {
// TODO Auto-generated method stub
}
public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1,
Object arg2, ModelAndView arg3) throws Exception {
// TODO Auto-generated method stub
}
public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
Object arg2) throws Exception {
// 获得请求的url
String url = request.getRequestURL().toString();
// 获得session
HttpSession session = request.getSession();
User user = (User) session.getAttribute("user");
log.info("===========================");
log.debug("url = {}", url);
log.info("===========================");
if (user == null)
{
if (checkUrl(url))
{
if (checkAjax(request))
{
Map map = new HashMap();
map.put("logOut", "logOut");
JSONObject json = JSONObject.fromObject(map);
response.getWriter().print(json.toString());
}
else
{
response.sendRedirect("/bills");
log.debug("需要拦截的非ajax请求");
//request.getRequestDispatcher("/").forward(request,response);
}
return false;
}
else
{
return true;
}
}
else
{
return true;
}
/*if (url.contains(".") || url.contains("user"))
{
return true;
}
else
{
if (user != null)
{
log.info("===========================");
log.debug("accountName = {}", user.getAccountName());
log.info("===========================");
return true;
} else
{
response.sendRedirect("/bills/");
//request.getRequestDispatcher("/").forward(request,response);
return false;
}
}*/
}
/**
* 判断是否是要拦截的请求
* @param url
* @return true 是需要拦截的
*/
private boolean checkUrl(String url)
{
if (!url.contains(".js") && !url.contains(".css") && !url.contains("user"))
{
log.debug("======该请求需要被拦截======");
return true;
}
else
{
return false;
}
}
/**
* 判断是否是ajax请求
* @return true 是ajax请求
*/
private boolean checkAjax(HttpServletRequest request)
{
if (request.getHeader("x-requested-with") != null &&
request.getHeader("x-requested-with").equalsIgnoreCase("XMLHttpRequest"))
{
log.debug("======该请求是ajax请求======");
return true;
}
else
{
return false;
}
}
}
springMVC配置文件
js
// 判断是否被拦截
if (data.logOut)
{
window.location.href = "/bills";
}
<?xml version="1.0" encoding="UTF-8"?>
log4jConfigLocationclasspath:conf/log4j.propertieslog4jRefreshInterval60000
org.springframework.web.util.Log4jConfigListener
contextConfigLocationclasspath:conf/applicationContext-*.xmlorg.springframework.web.context.ContextLoaderListenerspringorg.springframework.web.servlet.DispatcherServletcontextConfigLocationclasspath:conf/springmvc.xmlspring/spring requestorg.springframework.web.context.request.RequestContextListenerCharacterEncodingFilterorg.springframework.web.filter.CharacterEncodingFilterencodingutf-8CharacterEncodingFilter/*index.jsp404/error404.jsp500/error500.jsp
### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.err
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
### direct messages to file mylog.log ###
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=d\:mylog.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
### set log levels - for more verbose logging change 'info' to 'debug' ###
log4j.rootLogger=debug, stdout
function dealTable(data)
{
var str = "";
var str1 = "";
var str2 = "";
// 判断是否被拦截
if (data.logOut)
{
window.location.href = "/bills";
}
// 判断是否返回数据
if (data.bills)
{
for ( var i = 0; i < data.bills.length; i++)
{
if (i%2 == 0)
{
str1 = ""+data.bills[i].tittle+""+data.bills[i].price+""+data.bills[i].billtype.name+""+data.bills[i].billTime+""
+data.bills[i].explains+" ";
}
else
{
str2 = ""+data.bills[i].tittle+""+data.bills[i].price+""+data.bills[i].billtype.name+""+data.bills[i].billTime+""+
data.bills[i].explains+" ";
}
//$(""+data.result.id+""+data.result.name+"");
//str += ""+data.result[i].id+""+data.result[i].name+"删除";
str = str + str1 + str2;
str1 = "";
str2 = "";
}
}
$("#bills_tbody").html(str);
}
// 绑定删除
$("#bills_tbody").off("click").on("click", "a[trash='trash']", function()
{
var id = $(this).attr("id");
deleteBill(id);
});
// jquery实现动态绑定 分页
$("#page").off("click").on("click","li[page = 'page']",function()
{
//alert("click");
currentPage = $(this).attr("pageNo");
findForAjax(currentPage,userId);
});
// 页码展示
function dealPage(data)
{
var str = "";
for ( var i = 1; i <= data.totalPage; i++)
{
var strRed = "";
var strOther = "";
//str += "
"+i+"";
if (i == data.currentPage)
{
strRed = ""+i+"";
}
else
{
strOther = ""+i+"";
}
str = str + strRed + strOther;
}
var str1 = "共";
var str2 = ""+data.totalCount+"";
var str3 = "条";
var str4 = "";
var str5 = "";
if (data.totalPage > 0)
{
str4 = "第";
str5 = "页";
}
var strAll = str1 + str2 + str3 + str4 + str + str5;
$("#page").html(strAll);
}