在任何一个项目中,我们必须要用到的就是用户登录,那么就少不了用户是否登录的判断,如果我们每一个请求都要去做一次判断,那么就会变得很麻烦,但我们复制粘贴的时候我们就要考虑我们的代码写的是不是有问题,是不是可以重构一下,这里借鉴一下项目中的这种模式:

package interceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import logical.login.LoginUser; import org.apache.log4j.Logger;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; public class SessionCheckInterceptor extends HandlerInterceptorAdapter {
private static Logger log = Logger.getLogger(SessionCheckInterceptor.class.toString()); public void afterCompletion(HttpServletRequest request,
HttpServletResponse response,
Object handler,
Exception ex) throws Exception {
} @Override
public void postHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler,
ModelAndView modelAndView) throws Exception { } @Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
//判斷此使用者是否可進此連結
request.setCharacterEncoding("UTF-8");
String url = request.getServletPath();
log.info("post URL:"+url); /*{
List<HttpSession> sessionList = HttpSessionListenerTest.getAllSession();
log.info("\n\n\n\n Session資料開始============================");
for( int i=0; i < sessionList.size(); i++){
Object ob = sessionList.get(i).getAttribute("loginUser");
if( ob == null ){
continue;
}
LoginUser result = (LoginUser)ob;
System.out.println( result.getAccountName());
}
log.info("Session資料結束============================");
}
*/
/*String headername = "";
for(Enumeration e = request.getHeaderNames(); e.hasMoreElements();){
headername = (String)e.nextElement();
String value = request.getHeader(headername);
log.info(headername+":"+value);
}*/
if(this.isPassUrl(url)){
//判斷是否已登录
LoginUser loginUser = CssUtil.getLoginUser(request);
if(loginUser == null){
//無session則是未登录狀態
log.info(">>>未登录,請重新登录<<<");
response.sendRedirect("../login.jsp");
return false;
}
}
return true;
}
private boolean isPassUrl(String url){
if(!url.endsWith("/login/login")
&& !url.endsWith("/login/chnagePassEntry")
&& !url.endsWith("/login/change_Login")
&& !url.endsWith("/API/Service")
&& !url.endsWith("/API/Service2")
&& !url.endsWith("/province.txt")
&& !url.endsWith("/city.txt")
&& !url.endsWith("/area.txt")
&& !url.endsWith(".xml")
&& !url.endsWith(".js")
&& !url.endsWith(".css") && !url.endsWith(".png")
&& !url.endsWith(".CSS") && !url.endsWith(".CSS")
&& !url.endsWith(".jpg") && !url.endsWith(".gif")
&& !url.endsWith(".JPG") && !url.endsWith(".GIF")){
return true;
} return false;
}
}

最新文章

  1. 深入探究js中无所不在的this
  2. LINQ查询返回DataTable类型
  3. List对象分组排序算法
  4. MD5算法 简介
  5. 树形结构的数据库表Schema设计
  6. 硬盘结构介绍--mbr及分区
  7. GridControl 选择列、复选框全选(下)
  8. C# List
  9. h5 新增特性用法---持续更新
  10. vue2 递归组件--树形
  11. iPhone页面的常用调试方法
  12. php7连接mysql测试代码
  13. 运行go服务器后台挂起(不看调试信息)
  14. windows10 下使用Pycharm2016 基于Anaconda3 Python3.6 安装Mysql驱动总结
  15. Django集成Markdown编辑器【附源码】
  16. 《深入理解java虚拟机》第二章 Java内存区域与内存溢出异常
  17. vijos 1512 SuperBrother打鼹鼠
  18. 比特币系列钱包的UTXO总结
  19. 10-02 Java 形式参数和返回值的问题深入研究,链式编程
  20. JS中的的&quot;闭包&quot;?深入Javascript之this

热门文章

  1. JQuery中如何处理键盘事件
  2. 算法学习记录-图——应用之拓扑排序(Topological Sort)
  3. Ubuntu 清理卸载残留文件
  4. java 协程框架quasar gradle配置
  5. 【07】像使用命令行一样使用 GitHub URL
  6. 编辑器sublime(转)摘自网络
  7. Leetcode 413.等差数列划分
  8. Leetcode 334.递增的三元子序列
  9. [Kubernetes]Pod字段自动填充
  10. nodemailer发送邮件遇到的一些问题