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 如果是一个后台的管理项目的,有些东西是不能直接就可以访问的,必须要登录才可以 ...
随机推荐
- bootstrap table Showing 1 to 5 of 5 rows 页码显示英文
注意导包先后顺序bootstrap-table-zh-CN.js链接:https://cdn.bootcdn.net/ajax/libs/bootstrap-table/1.16.0/locale/b ...
- 最小生成树——Kruskal算法理解
背景:本文是在小甲鱼数据结构教学视频中的代码的基础上,添加详细注释而完成的.该段代码并不完整,仅摘录了核心算法部分,结合自己的思考,谈谈理解. Prim算法理解: 如图(摘录自小甲鱼教学视频中的图片) ...
- Jupyternotebook添加c++核心支持的配置过程
一.环境:虚拟机:(1)系统:centos7.5_1804(64bit)版本(2)软件环境:git.python3.5.3.Jupyter4.4.0二.下载安装脚本:资源及安装说明:https://g ...
- Rocket - regmapper - RegMapper
https://mp.weixin.qq.com/s/aXxgzWwh6unuztjgyVX0iQ 简单介绍RegMapper的实现. 1. 简单介绍 RegMapper使用指定的输入接口,为一组寄存 ...
- Kubernetes笔记(四):详解Namespace与资源限制ResourceQuota,LimitRange
前面我们对K8s的基本组件与概念有了个大致的印象,并且基于K8s实现了一个初步的CI/CD流程,但对里面涉及的各个对象(如Namespace, Pod, Deployment, Service, In ...
- Java实现 LeetCode 793 阶乘函数后K个零 (分析)
793. 阶乘函数后K个零 f(x) 是 x! 末尾是0的数量.(回想一下 x! = 1 * 2 * 3 * - * x,且0! = 1) 例如, f(3) = 0 ,因为3! = 6的末尾没有0:而 ...
- Java实现蓝桥杯日期问题
历届试题 日期问题 时间限制:1.0s 内存限制:256.0MB 提交此题 问题描述 小明正在整理一批历史文献.这些历史文献中出现了很多日期.小明知道这些日期都在1960年1月1日至2059年12月3 ...
- Java蓝桥杯 算法训练 复数归一化
算法提高 复数归一化 时间限制:1.0s 内存限制:512.0MB 编写函数Normalize,将复数归一化,即若复数为a+bi,归一化结果为a/sqrt(aa+bb) + ib/sqrt(aa+b* ...
- Java实现 LeetCode 67 二进制求和
67. 二进制求和 给定两个二进制字符串,返回他们的和(用二进制表示). 输入为非空字符串且只包含数字 1 和 0. 示例 1: 输入: a = "11", b = "1 ...
- Java中构造方法的详细介绍
构造方法是一个特殊的方法 它会在实例化对象时自动调用 构造方法的定义 必须同时满足下面的三个条件 方法名与类名相同 方法名前面没有返回值类型的声明 在方法中不能使用return语句返回值 class ...