1:创建过滤器ShiroPermissionsFilter
import org.apache.commons.lang.StringUtils;
import org.apache.shiro.web.servlet.AdviceFilter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ShiroPermissionsFilter extends AdviceFilter {
private static final Logger logger = LoggerFactory
.getLogger(ShiroPermissionsFilter.class);
@Override
protected boolean preHandle(ServletRequest request, ServletResponse response) throws Exception {
HttpServletRequest httpServletRequest = (HttpServletRequest) request;
HttpServletResponse httpServletResponse = (HttpServletResponse) response;
Object sysUser = httpServletRequest.getSession().getAttribute("user");
String url = httpServletRequest.getRequestURI();
if (null == sysUser && !url.equals("/")) {
String requestedWith = httpServletRequest.getHeader("X-Requested-With");
if (StringUtils.isNotEmpty(requestedWith) && StringUtils.equals(requestedWith, "XMLHttpRequest")) {//如果是ajax返回指定数据
// 重定向
String path = httpServletRequest.getContextPath();
String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";
// ajax请求
httpServletResponse.setHeader("sessionstatus", "TIMEOUT");
httpServletResponse.setHeader("content_path", basePath + "login");
httpServletResponse.setStatus(HttpServletResponse.SC_FORBIDDEN);//403 禁止
return false;
} else {//不是ajax进行重定向处理
logger.info( url+"重定向到了登录界面");
httpServletResponse.sendRedirect("/login");
return false;
}
}
return true;
}
}
2:在shiro配置文件xml中定义bean
<bean id="loginFilter" class="com.xcd.bpc.shiro.ShiroPermissionsFilter"></bean>
3:在shiro配置文件的shiroFilter配置bean中设置filters
<property name="filters" >
<map>
<entry key="authc" value-ref="loginFilter"></entry>
</map>
</property>
4:创建一个js文件ajaxSetup.js
$(function() {
$.ajaxSetup({
complete: function (XMLHttpRequest, textStatus) {
console.log(textStatus)
// 通过XMLHttpRequest取得响应头,sessionstatus
var sessionstatus = XMLHttpRequest.getResponseHeader("sessionstatus");
if (sessionstatus == "TIMEOUT") {
var win = window;
while (win != win.top) {
win = win.top;
}
win.location.href = XMLHttpRequest.getResponseHeader("content_path");
}
}
});
})
5:在调用ajax的文件中引入4中的js文件ajaxSetup.js