SSM登录拦截验证
/**
* 登陆拦截器,用于后台管理系统拦截,判断用户是否登录
* @author ljy
* @date 2015/8/19
*/
public class LoginForAdminInterceptor extends HandlerInterceptorAdapter {
@Resource
private AdminService adminService;
//private static final String[] IGNORE_URI = {};//定义不拦截的资源
/*
* 在执行action里面的处理逻辑之前执行,它返回的是boolean,这里如果我们返回true在接着执行postHandle和afterCompletion,如果我们返回false则中断执行。
*/
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response,Object handler) throws Exception {
String url = request.getRequestURL().toString();
System.out.println(url);
boolean flag = false;//默认验证失败,即拦截请求
String message=null;//用于传递到前台的信息
HttpSession session=request.getSession();
Admin admin=(Admin)session.getAttribute("admin");
if(admin!=null){
//获取最新账户信息,并且如果账户被在其他地方修改密码,那么将被迫下线
admin=adminService.login(admin.getUsername(), admin.getPassword());
if(admin!=null){
flag=true;
session.setAttribute("admin", admin);
}else{
message="系统提示:您的账户信息已经更改,请重新登录";
//移除可能过时的账户信息
session.removeAttribute("admin");
}
}else{
message="登录超时,请重新登录";
}
if(flag==false){//如果没有登录或登录异常
if (request.getHeader("x-requested-with") != null && request.getHeader("x-requested-with").equalsIgnoreCase("XMLHttpRequest")){//如果是ajax请求
//返回错误信息
Map<String, Object> map = new HashMap<String, Object>();
map.put("status", -1);
map.put("myMessage", "请先登录!");
JSONObject jsonObject= JSONObject.fromObject(map);
//注意,必须加上这个,才能让前端JS认为是JSON格式来进行相应处理
response.setContentType("application/json;charset=UTF-8");
PrintWriter out = response.getWriter();
out.print(jsonObject.toString());
out.flush();
out.close();
}else{//如果是同步请求
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
//对信息进行编码处理,否则中文无法传递到前台
message = java.net.URLEncoder.encode(message.toString(),"utf-8");
response.sendRedirect(basePath+"backstage/toLogin?myMessage="+message);
/*
* 说明:request.getRequestDispatcher跳转时,由于地址还是被拦截的Controller请求,因此会导致执行两次
* 从而可能导致异常,因此使用response.sendRedirect
*/
//request.setAttribute("myMessage",message);
//request.getRequestDispatcher("/admin/toLogin").forward(request,response);
}
}
return flag;
}
//在执行action里面的逻辑后返回视图之前执行。
@Override
public void postHandle(HttpServletRequest request,
HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
super.postHandle(request, response, handler, modelAndView);
}
//在执行action里面的逻辑后返回视图之后执行。
@Override
public void afterCompletion(HttpServletRequest request,
HttpServletResponse response, Object handler,
Exception ex) throws Exception {
super.afterCompletion(request, response, handler, ex);
}
}
SSM登录拦截验证的更多相关文章
- struts2学习笔记--拦截器(Interceptor)和登录权限验证Demo
理解 Interceptor拦截器类似于我们学过的过滤器,是可以在action执行前后执行的代码.是我们做web开发是经常使用的技术,比如权限控制,日志.我们也可以把多个interceptor连在一起 ...
- springmvc拦截器实现用户登录权限验证
实现用户登录权限验证 先看一下我的项目的目录,我是在intellij idea 上开发的 1.先创建一个User类 package cn.lzc.po; public class User { pri ...
- ASP.NET MVC如何做一个简单的非法登录拦截
摘要:做网站的时候,经常碰到这种问题,一个没登录的用户,却可以通过localhost:23244/Main/Index的方式进入到网站的内部,查看网站的信息.我们知道,这是极不安全的,那么如何对这样的 ...
- springMvc基于注解登录拦截器
1.首先先定义一个拦截器注解 @Target({ElementType.METHOD, ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) p ...
- 程序猿修仙之路--数据结构之你是否真的懂数组? c#socket TCP同步网络通信 用lambda表达式树替代反射 ASP.NET MVC如何做一个简单的非法登录拦截
程序猿修仙之路--数据结构之你是否真的懂数组? 数据结构 但凡IT江湖侠士,算法与数据结构为必修之课.早有前辈已经明确指出:程序=算法+数据结构 .要想在之后的江湖历练中通关,数据结构必不可少. ...
- struts2自定义登录拦截器
版权声明:本文为博主原创文章,未经博主允许不得转载. (1)配置web.xml,让xml加载struts2框架 <?xml version="1.0" encoding=&q ...
- springMVC中实现用户登录权限验证
通过上网搜资料显示,使用filter和interceptor都可以实现.不过推荐使用interceptor. 下面就使用Interceptor实现用户登录权限验证功能. 拦截器需要实现Inceptor ...
- WEB开发----springboot的登录拦截机制
如果是一个后台的管理项目的,有些东西是不能直接就可以访问的,必须要登录才可以进去,所以就需要进行登录拦截,只有登录过的用户才可以正常访问. 登录拦截是不会拦截jsp页面的方法,所以我们需要在Contr ...
- springboot的登录拦截机制
转自:https://blog.csdn.net/qq_26555463/article/details/78296103 如果是一个后台的管理项目的,有些东西是不能直接就可以访问的,必须要登录才可以 ...
随机推荐
- jQuery 获取页面宽高
无滚动条的情况下(页面宽高比可视区域小):$(document)和$(window)的width.height方法获取的值都是一样的,都是可视区域的宽高即$(document).width()==$( ...
- JavaScript 简版-菜鸟中的菜鸟2
JavaScript 输出 JavaScript 没有任何打印或者输出的函数. JavaScript 显示数据 JavaScript 可以通过不同的方式来输出数据: 使用 window.alert() ...
- 概念辨析-Hardware Description还是Hardware Developing?
https://mp.weixin.qq.com/s/j4Ndo1R4Go9IaGbhE_nsTg Verilog, standardized as IEEE 1364, is a hardwar ...
- Rocket - diplomacy - LazyModule实例:Buffer
https://mp.weixin.qq.com/s/j1M9ZOTtqvc1Fv9T6dy9kg 以tilelink下的Buffer为例,介绍LazyModule如何组织内部的节点和模块. ...
- 关于URL优化的一些经验
URL在搜索结果列表中时显示内容之一.设计网站结构时需要对目录及文件命名系统做事先规划.总的原则是首先从用户体验出发,URL应该清晰友好.方便记忆,然后才考虑URL对排名的影响.具体可以考虑以下几个方 ...
- MyBatis(一) 概述与SQL定制、对象映射
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 一.MyBatis概述 1.mybatis简介 MyBatis 是支持定制化 SQL.存储过程以及高级映 ...
- Java实现 LeetCode 753 破解保险箱(递归)
753. 破解保险箱 有一个需要密码才能打开的保险箱.密码是 n 位数, 密码的每一位是 k 位序列 0, 1, -, k-1 中的一个 . 你可以随意输入密码,保险箱会自动记住最后 n 位输入,如果 ...
- Java实现 蓝桥杯 算法训练 递归求二项式系数
算法训练 6-1 递归求二项式系数值 时间限制:10.0s 内存限制:256.0MB 问题描述 样例输入 一个满足题目要求的输入范例. 3 10 样例输出 与上面的样例输入对应的输出. 数据规模和约定 ...
- Java实现 蓝桥杯 算法训练 约数个数
算法提高 约数个数 时间限制:1.0s 内存限制:512.0MB 输入一个正整数N (1 样例输入 12 样例输出 6 样例说明 12的约数包括:1,2,3,4,6,12.共6个 import jav ...
- Java实现 LeetCode 429 N叉树的层序遍历
429. N叉树的层序遍历 给定一个 N 叉树,返回其节点值的层序遍历. (即从左到右,逐层遍历). 例如,给定一个 3叉树 : 返回其层序遍历: [ [1], [3,2,4], [5,6] ] 说明 ...