步骤一:编写一个拦截器类
import java.io.PrintWriter;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Repository;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import com.base.utils.SessionName;
@Repository
public class SystemInterceptor extends HandlerInterceptorAdapter {
//在配置文件中配置要放行的URL
private List<String> paramList;
Logger log = Logger.getLogger(SystemInterceptor.class);
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
HttpSession session = request.getSession();
// 请求的虚拟目录
String basePath = request.getContextPath();
String requestPath = request.getServletPath();
try {
if (!requestPath.contains(".")) {
log.info(">>" + requestPath);
// 判断当前页是否是重定向以后的登录页面页面,如果是就不做session的判断,防止出现死循环
if (session == null || session.getAttribute(SessionName.ADMIN_USER_ID) == null) {// 未登录
//放心的连接
if (paramList.contains(requestPath)) {
return super.preHandle(request, response, handler);
} else {
// 未登录
PrintWriter out = response.getWriter();
StringBuilder builder = new StringBuilder();
builder.append("<script type=\"text/javascript\" charset=\"UTF-8\">");
builder.append("alert(\"页面过期,请重新登录\");");
builder.append("window.top.location.href=\"");
builder.append(basePath);
builder.append("/manageAdminUser/toLogin\";</script>");
out.print(builder.toString());
out.close();
return false;
// response.sendRedirect(basePath + "/manageAdminUser/toLogin");// 登陆页面
}
} else {// 已登录
request.setAttribute("requestPath", requestPath);
return super.preHandle(request, response, handler);
}
} else {
return super.preHandle(request, response, handler);
}
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
//设置放行的URL
public void setParamList(List<String> paramList) {
this.paramList = paramList;
}
}
步骤二:在spring-servlet.xml中配置拦截器
<!-- 拦截器 -->
<mvc:interceptors>
<bean class="com.base.interceptor.SystemInterceptor">
<!-- 配置不拦截的URL -->
<property name="paramList">
<list>
<value>/manageAdminUser/toLogin</value>
<value>/manageAdminUser/login</value>
<value>/manageAdminUser/pcrimg</value>
<value>/api/client/login</value>
<value>/api/client/loginDirect</value>
<value>/api/client/loginDemo</value>
<value>/api/client/loginDemoAjax</value>
<value>/api/client/uploadDoc</value>
<value>/api/client/mvdoc</value>
<value>/api/client/docs</value>
</list>
</property>
</bean>
</mvc:interceptors>
<span style="white-space:pre"> </span><servlet>
<servlet-name>spring3</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring3-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring3</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>