- 浏览: 335875 次
- 性别:
- 来自: 南京
文章分类
- 全部博客 (169)
- spring (20)
- java (44)
- ibatis (0)
- hibernate (6)
- struts (2)
- javascript (6)
- ajax (1)
- eclipse (4)
- 其他 (10)
- database (17)
- ibatis 分页 (7)
- xml (2)
- pl/sql (6)
- sql (4)
- apache (3)
- oracle (8)
- jdom (1)
- Open ModelSphere (1)
- 线程 (2)
- 多线程 (2)
- 查找文件 (1)
- Comparator (2)
- jxl (2)
- jquery (1)
- Flex (2)
- 非技术 (1)
- mysql (2)
- zxing (1)
- jdbc (1)
- Java内存 (1)
- editplus (1)
- log4j (1)
- sqlserver (2)
- base64 (1)
- Linux (4)
- Shell (2)
- 非技术共享 (1)
- 省市 (1)
- PowerDesigner (3)
- 观察者模式 (2)
- Servlet (1)
- 单点登录 (1)
- IO (1)
- tomcat (1)
- clob (1)
- html (1)
- jsp (2)
- JNative (1)
- WebService (2)
- Highcharts (1)
- Spring Security (1)
- ztree (1)
- Mongodb (3)
- sftp (1)
- SVN (1)
- openSUSE (1)
- Ubuntu (1)
- nio (1)
- springboot (1)
- java8 (1)
最新评论
-
wajjj:
[flash=200,200][url][img][list] ...
【JAVA】读取excel内容(兼容03和07格式) -
xurichusheng:
jjhe369 写道感谢分享!但是发现一个小问题,就是第13, ...
oracle 存储过程分页查询 -
jjhe369:
感谢分享!但是发现一个小问题,就是第13,14行的V_STAR ...
oracle 存储过程分页查询 -
飞天奔月:
为什么不用 Map<String, String> ...
读取.properties的内容,并将内容放入一个Map中 -
xurichusheng:
814687491 写道测试了一下,无法换行!你可以自定义自己 ...
使用google的zxing制作二维码
1、在做项目的时候,遇到了一个Spring拦截器的问题。
项目框架:Spring2.5+hibernate3.0
基于Spring注解。
在登录成功后,将用户对象emp绑定在session上。
由于使用了注解,所以只能以方法参数的形式取得emp。
如:
/**
* Factory: 一个实体类
*
*/
@RequestMapping("/save.do")
public ModelAndView save(@ModelAttribute("emp")Employee emp,
Factory factory, ModelMap model){
}
如果未登录,一调用这个方法,发现emp是null,马上抛出了异常,
根本不会进入方法体。
所以需要一个拦截器,判断是否登录,即emp是否是空的。
刚开始的时候,拦截器是这么写的:
public class SessionInterceptor extends HandlerInterceptorAdapter {
private final Logger logger = Logger.getLogger(SessionInterceptor.class);
/**
* 在业务处理器处理请求之前被调用
*/
@SuppressWarnings("unchecked")
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
Object obj) throws Exception {
// TODO Auto-generated method stub
Employee emp = (Employee)request.getSession().getAttribute("emp");
if(null == emp){
//跳转到登录
response.sendRedirect("index.ftl");
return true;
}
return true;
}
/**
* 在业务处理器处理完请求后
*/
// public void postHandle(HttpServletRequest request, HttpServletResponse response,
// Object handler, ModelAndView model) throws Exception {
// // TODO Auto-generated method stub
//
//
// }
/**
* 在DispatcherServlet完全处理完请求后被调用
*/
// @Override
// public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
// throws Exception{
// }
}
Spring 配置文件 applicationContext.xml
<!-- 拦截器-->
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
<property name="interceptors">
<list>
<bean class="com.iss.delver.common.core.interceptor.SessionInterceptor" />
</list>
</property>
</bean>
<!-- error 表示一个错误的页面 error.ftl -->
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="defaultErrorView">
<value>error</value>
</property>
<property name="exceptionMappings">
<props>
<prop key="java.sql.SQLException">
error
</prop>
</props>
</property>
</bean>
由于是在进入方法之前(preHandle)拦截的,所以,在拦截器中,
即使是第一次登录,emp也是null,所以永远都是跳转到index.ftl中。
这时,有2种方法可以解决这个问题:
第一种:在spring的配置文件中,将登录login.do排除。
第二种:将拦截器的preHandle(..)中的代码移到postHandle()中
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception{
logger.debug("===== afterCompletion ======");
//拿到绑定在 session 上的对象
Employee emp = (Employee)request.getSession().getAttribute("emp");
Tenant tenant = (Tenant)request.getSession().getAttribute("tt");
Classes cls = (Classes)request.getSession().getAttribute("cls");
if(null == emp || null==tenant || null==cls){
//如果未登录,则跳转到登录页面
response.sendRedirect("index.ftl");
}
}
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="defaultErrorView">
<!-- 这里,将error换成index -->
<value>index</value>
</property>
<property name="exceptionMappings">
<props>
<prop key="java.sql.SQLException">
error
</prop>
</props>
</property>
</bean>
这样子的话,如果未登录,将会自动跳转到inde.ftl页面。
拦截器也起作用了。
项目框架:Spring2.5+hibernate3.0
基于Spring注解。
在登录成功后,将用户对象emp绑定在session上。
由于使用了注解,所以只能以方法参数的形式取得emp。
如:
/**
* Factory: 一个实体类
*
*/
@RequestMapping("/save.do")
public ModelAndView save(@ModelAttribute("emp")Employee emp,
Factory factory, ModelMap model){
}
如果未登录,一调用这个方法,发现emp是null,马上抛出了异常,
根本不会进入方法体。
所以需要一个拦截器,判断是否登录,即emp是否是空的。
刚开始的时候,拦截器是这么写的:
public class SessionInterceptor extends HandlerInterceptorAdapter {
private final Logger logger = Logger.getLogger(SessionInterceptor.class);
/**
* 在业务处理器处理请求之前被调用
*/
@SuppressWarnings("unchecked")
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
Object obj) throws Exception {
// TODO Auto-generated method stub
Employee emp = (Employee)request.getSession().getAttribute("emp");
if(null == emp){
//跳转到登录
response.sendRedirect("index.ftl");
return true;
}
return true;
}
/**
* 在业务处理器处理完请求后
*/
// public void postHandle(HttpServletRequest request, HttpServletResponse response,
// Object handler, ModelAndView model) throws Exception {
// // TODO Auto-generated method stub
//
//
// }
/**
* 在DispatcherServlet完全处理完请求后被调用
*/
// @Override
// public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
// throws Exception{
// }
}
Spring 配置文件 applicationContext.xml
<!-- 拦截器-->
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
<property name="interceptors">
<list>
<bean class="com.iss.delver.common.core.interceptor.SessionInterceptor" />
</list>
</property>
</bean>
<!-- error 表示一个错误的页面 error.ftl -->
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="defaultErrorView">
<value>error</value>
</property>
<property name="exceptionMappings">
<props>
<prop key="java.sql.SQLException">
error
</prop>
</props>
</property>
</bean>
由于是在进入方法之前(preHandle)拦截的,所以,在拦截器中,
即使是第一次登录,emp也是null,所以永远都是跳转到index.ftl中。
这时,有2种方法可以解决这个问题:
第一种:在spring的配置文件中,将登录login.do排除。
第二种:将拦截器的preHandle(..)中的代码移到postHandle()中
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception{
logger.debug("===== afterCompletion ======");
//拿到绑定在 session 上的对象
Employee emp = (Employee)request.getSession().getAttribute("emp");
Tenant tenant = (Tenant)request.getSession().getAttribute("tt");
Classes cls = (Classes)request.getSession().getAttribute("cls");
if(null == emp || null==tenant || null==cls){
//如果未登录,则跳转到登录页面
response.sendRedirect("index.ftl");
}
}
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="defaultErrorView">
<!-- 这里,将error换成index -->
<value>index</value>
</property>
<property name="exceptionMappings">
<props>
<prop key="java.sql.SQLException">
error
</prop>
</props>
</property>
</bean>
这样子的话,如果未登录,将会自动跳转到inde.ftl页面。
拦截器也起作用了。
发表评论
-
spring mvc 定时任务,避免同时执行两次
2019-03-09 18:14 3219spring版本:3.1.0 或以 ... -
Spring jdbcTemplate示例
2015-07-08 15:26 1145Spring jdbcTemplate示例 1. ... -
jsp页面显示二进制图片
2014-11-05 15:58 40131. DAO层 import java.sql.C ... -
Spring工具类,提供取得Spring配置文件中定义的Bean的方法
2014-05-15 19:02 1505在 java EE 工程中,经常会用到定 ... -
使用Spring的JdbcTemplate处理Clob
2013-11-01 11:04 42191. 数据库表 req_seq CREATE TA ... -
oracle 存储过程分页查询
2013-10-24 11:09 1901oracle 10gR2 Spring JDBCTe ... -
Spring MVC 处理请求流程
2011-06-01 15:03 1273Spring MVC 处理请求流程: ... -
在spring中配置ibatis 04_dao类
2011-05-31 14:15 1610BaseDAOImpl<T>.java p ... -
在spring中配置ibatis 03_xml配置
2011-05-31 14:11 993UserEntity.xml <?xml ver ... -
在spring中配置ibatis 02_xml配置
2011-05-31 14:09 9331、applicationContext-service.xm ... -
在spring中配置ibatis 01_xml配置
2011-05-31 14:01 10231、applicationContext.xml &l ... -
jdbc.properties
2011-05-31 11:37 3752### mysql ### driverClassName ... -
Spring 配置文件--- 事务处理
2011-05-31 11:28 1329事务的处理在service层。 &l ... -
Spring 配置文件--- 数据源配置(c3p0)
2011-05-31 11:24 1192<!-- 数据库连接配置文件 --> & ... -
Spring 配置文件--- 数据源配置(dbcp)
2011-05-31 11:23 1163applicationContext.xml & ... -
spring 定时任务
2011-05-20 14:54 1104import java.util.TimerTask; ... -
另一个 spring 拦截器
2010-07-13 13:48 1519import javax.servlet.http.HttpS ... -
Spring RedirectView 传值乱码解决
2010-05-04 17:40 3106使用的是spring的注解 public ModelAnd ... -
一个 Spring 拦截器
2010-04-13 14:40 1564package com.common.core.interce ...
相关推荐
spring拦截器,高级参数绑定,controller返回值
AOP拦截器示例,告诉我们初学者理解aop,通过一个银行转帐说明问题。
NULL 博文链接:https://lpm528.iteye.com/blog/1259187
NULL 博文链接:https://rogerhunt.iteye.com/blog/608778
spring拦截器的简单例子.docx
spring mvc 拦截器获取请求数据信息 解压之后放到项目中 直接运行就可以了 (将流多次运用)
idea软件。SpringBoot的拦截器的博客所写的例子。preHandle()方法的返回值true和false的详细区别还未描述
这一版本的项目中新增了拦截器的一个demo
NULL 博文链接:https://bijian1013.iteye.com/blog/2142522
Spring AOP 拦截器 Advisor Spring AOP 拦截器 Advisor
Spring AOP四种创建通知(拦截器)类型
使用CGLIB编写的Spring的拦截器 非常使用的哦
Spring MVC 拦截器Spring MVC 拦截器
spring-boot 拦截器 登录拦截spring-boot 拦截器 登录拦截spring-boot 拦截器 登录拦截spring-boot 拦截器 登录拦截
主要介绍了Spring拦截器HandlerInterceptor接口代码解析,具有一定借鉴价值,需要的朋友可以参考下
初学者很容易将 Spring MVC 拦截器 和 Spring Cloud OpenFeign 拦截器搞混,误以为OpenFeign拦截器就是SpringMVC拦截器:Spring MVC拦截器发生在客户端 和 服务端之间,在客户端向服务端发送请求时进行拦截处理。...
NULL 博文链接:https://269181927.iteye.com/blog/788426
自己spring boot 拦截器,可以自定义限制跳转路径及自定义不拦截哪些具体路径,具体设置可以看注释,一看就懂,引用哪些包已经包含了,不明白的请浏览,看到后第一时间给您回复
本篇文章主要介绍了使用spring拦截器实现日志管理实例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。