yycg之用户身份校验(二)
来源:互联网 发布:mac os 哪个版本号 编辑:程序博客网 时间:2024/06/06 00:31
1.1 用户身份校验
实现步骤:
校验用户存在
校验密码合法
构建用户身份信息
Action
验证码校验
用户认证
将用户信息写入session
页面
Login.jsp 界面
预加载方法表单校验
退出编写
通常使用filter过虑器,本系统采用springmvc拦截器实现。
springmvc拦截器是基于处理器映射器HandlerMapping进行拦截。
在spring mvc.xml 中配置拦截器 针对mapper拦截 不是全局的
定义拦截器
可以采用一种方法定义一处拦截器,自动在每个HandlerMapping中进行注册。此部分可以参考我以前的博客 : http://blog.csdn.net/u012373815/article/details/47208565
<!-- 拦截器 -->
<mvc:interceptors>
<!--多个拦截器,顺序执行 -->
<!--用户身份校验的拦截器 -->
<mvc:interceptor>
<mvc:mappingpath="/**"/>
<beanclass="yycg.base.filter.LoginInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>
拦截器定义,需要实现HanlderInterceptor接口。
ResourcesUtil ResultUtil 为工具类
//拦截器
//Springmvc 的拦截器 在spring mvc.xml 中配置拦截器 针对mapper拦截不是全局的
publicclassLoginInterceptor implements HandlerInterceptor {
// 执行时机:进入action方法之前执行
// 使用场景:用于用户认证、用户授权拦截
@Override
publicbooleanpreHandle(HttpServletRequest request,
HttpServletResponseresponse, Object handler)throws Exception {
//校验用户合法性
HttpSessionsession=request.getSession();
ActiveUseractiveUser=(ActiveUser) session.getAttribute(Config.ACTIVEUSER_KEY);
if(activeUser!=null)
{//用户登录
returntrue;
}
//用户是否访问公开链接
List<String>open_urls=ResourcesUtil.gekeyList(Config.ANONYMOUS_ACTIONS);
Stringurl=request.getRequestURI();
for(Stringopen_url:open_urls)
{//访问链接是否包含公共链接
if(url.indexOf(open_url)>0)
{//包含公共链接放行
returntrue;
}
}
//访问没有权限的地址拦截
//request.getRequestDispatcher("WEB-INF/jsp/base/login.jsp").forward(request,response);
//抛106异常需要登录执行本操作 。解决拦截器提交时session过期 提交被拦截问题无法响应登录页面问题
ResultUtil.throwExcepion(ResultUtil.createWarning(Config.MESSAGE, 106,null));
returntrue;
}
// 执行时机:进入action方法,在返回modelAndView之前执行
// 使用场景:在这里统一对返回数据进行处理,比如统一添加菜单导航
@Override
publicvoidpostHandle(HttpServletRequest request,
HttpServletResponseresponse, Object handler,
ModelAndViewmodelAndView) throwsException {
}
// 执行时机:action方法执行完成,已经返回modelAndView,执行。
// 使用场景:统一处理系统异常,在这里统一记录系统日志
// ,监控action方法执行时间,在preHandle记录开始时间,在afterCompletion记录结束时间
@Override
publicvoidafterCompletion(HttpServletRequest request,
HttpServletResponseresponse, Object handler, Exception ex)
throws Exception {
//TODO Auto-generated method stub
}
1.1.1 配置公开资源地址
取出该配置文件中公开地址:
使用工具类在,ResourcesUtil中的gekeyList方法在工具的工程里
package yycg.util;
import java.io.Serializable;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.ResourceBundle;
import java.util.Set;
/**
* 资源文件读取工具类
*
*/
public class ResourcesUtil implementsSerializable {
1.2 测试用户身份校验
1、请求系统首先(非公开地址)
自动跳转到登陆页面。
用户登陆,拦截器放行。
2、在嵌入的页面中,如果session过期了,跳转到登陆页面
现象:
登陆页面是嵌入在页面中。
修改登陆提交的回调方法,
//回首页
functiontofirst(){
//window.location='${baseurl}first.action';
if(parent.parent.parent){
//让最外层页面执行跳转
parent.parent.parent.location='${baseurl}first.action';
}else if(parent.parent){
parent.parent.location='${baseurl}first.action';
}else if(parent){
parent.location='${baseurl}first.action';
}else{
window.location='${baseurl}first.action';
}
}
3、当执行一个提交操作时,session过期,应该跳转登陆页面
本系统提交返回是json(SubmitResultInfo) ,由于LoginInterceptor拦截器作用,拦截了,返回了登陆页面。
无法解析登陆页面内容。
解决:
在LoginInterceptor中,对需要跳转登陆页面,抛出106异常。
//抛106异常需要登录执行本操作 。解决拦截器提交时session过期 提交被拦截问题无法响应登录页面问题
ResultUtil.throwExcepion(ResultUtil.createWarning(Config.MESSAGE, 106,null));
在全局异常处理器resolveException中解析106异常。
解析异常代码是否是106如果是106跳转登陆页面
String view="/base/error";
//解析106异常
intexception_code=exceptionResultInfo.getResultInfo().getMessageCode();
if(exception_code==106)
{
view="/base/login";
}
//发送异常倒页面
request.setAttribute("exceptionResultInfo",
exceptionResultInfo.getResultInfo());
//转向错误页面
ModelAndViewmodelAndView = newModelAndView();
modelAndView.addObject("exceptionResultInfo",
exceptionResultInfo.getResultInfo());
modelAndView.setViewName(view);
return modelAndView;
- yycg之用户身份校验(二)
- yycg 之用户认证(一)
- yycg之药品目录导出(二)+系统参数配置
- yycg 的用户删除和用户修改模块
- Struts2校验器(二)之注解
- shiro框架之授予身份及身份切换 二十一
- 身份号码校验
- yycg 之供货商药品目录模块分析
- PHP中用户身份认证实现二法
- PHP中用户身份认证实现二法(2)
- PHP中用户身份认证实现二法(1)
- Validation校验(二)
- Linux之用户身份的查看与切换(su+sudo)
- 处理session过期(401)身份过期用户重新登陆的方法之重写ajax
- (Struts2学习篇) Struts2数据校验之二
- struts2之用户登录校验数据库信息
- 公民身份号码的校验
- 中华人民共和国公民身份号码校验
- Redis中PipeLine使用(二)---批量get与批量set
- Java 理论与实践: 非阻塞算法简介--转载
- 常用的机器学习&数据挖掘翻译(转)
- Codevs_P2981 查字典1(BIT)
- 设置video.js多视频连续播放
- yycg之用户身份校验(二)
- Elasticsearch-PHP 索引操作
- 鸟哥的Linux私房菜(基础篇)- 一个简单的 SPFdisk 分割实例
- AS 项目 Gradle DSL method not found: 'runProguard()
- 在php中定义常量时,const与define的区别
- 完美解决IE(IE6/IE7/IE8)不兼容HTML5标签的方法
- android客户端native性能关注&&问题排查
- 并发编程 — 并发数据结构--转载
- 中文域名都有哪些类型?