springmvc 注解 xml注解方式web.xml中的拦截地址怎么配

本帖子已过去太久远了,不再提供回复功能。基于注解SpringMvc拦截器无法使用 - ITeye问答
在我自定义的拦截器中打了断点一直无法进入,拦截器定义在controllers.xml中
代码如下帮忙解决下,谢谢
package com.core.I
import javax.servlet.http.HttpServletR
import javax.servlet.http.HttpServletR
import javax.servlet.http.HttpS
import org.springframework.web.servlet.ModelAndV
import org.springframework.web.servlet.handler.HandlerInterceptorA
public class BasedInterceptor extends HandlerInterceptorAdapter {
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
HttpSession sesson = request.getSession();
if(sesson.getAttribute("user") == null){
request.getRequestDispatcher("index.jsp").forward(request, response);
public void postHandle(HttpServletRequest request,
HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
request.getRequestDispatcher("index.jsp").forward(request, response);
public void afterCompletion(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception ex)
throws Exception {
request.getRequestDispatcher("index.jsp").forward(request, response);
&?xml version="1.0" encoding="UTF-8"?&
&web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="/xml/ns/javaee" xmlns:web="/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="/xml/ns/javaee /xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"&
&display-name&SpringTest&/display-name&
&context-param&
&param-name&contextConfigLocation&/param-name&
&param-value&classpath:applicationContext*.xml&/param-value&
&/context-param&
&listener&
&listener-class&org.springframework.web.context.ContextLoaderListener&/listener-class&
&/listener&
&!-- 对像js,css,gif等静态文件的访问,需要映射到默认的servlet --&
&!-- 这里省去对静态资源url的配置,当然这样的话tomcat控制台就会报警告了,对html的请求、页面中的图片及css效果也是无法访问的
不过我们这是搭基本环境嘛,就先不要图片吧,如果想解决这个问题,可以看我另外一篇文章:
&!-- 配置spring核心servlet --&
&servlet-name&spring&/servlet-name&
&servlet-class&org.springframework.web.servlet.DispatcherServlet&/servlet-class&
&init-param&
&param-name&contextConfigLocation&/param-name&
&param-value&/WEB-INF/servlet-context.xml&/param-value&
&/init-param&
&load-on-startup&1&/load-on-startup&
&/servlet&
&servlet-mapping&
&servlet-name&spring&/servlet-name&
&url-pattern&*.do&/url-pattern&
&!-- url配置为/,不带文件后缀,会造成其它静态文件(js,css等)不能访问。如配为*.do,则不影响静态文件的访问 --&
&/servlet-mapping&
&!-- Spring 刷新Introspector防止内存泄露 --&
&listener&
&listener-class&
org.springframework.web.util.IntrospectorCleanupListener
&/listener-class&
&/listener&
&!-- 字符编码过滤器 --&
&filter-name&encodingFilter&/filter-name&
&filter-class&org.springframework.web.filter.CharacterEncodingFilter&/filter-class&
&init-param&
&param-name&encoding&/param-name&
&param-value&GBK&/param-value&
&/init-param&
&filter-mapping&
&filter-name&encodingFilter&/filter-name&
&url-pattern&*.do&/url-pattern&
&/filter-mapping&
&!-- 欢迎页面 --&
&welcome-file-list&
&welcome-file&index.jsp&/welcome-file&
&/welcome-file-list&
&/web-app&
servlet-context.xml
&?xml version="1.0" encoding="UTF-8"?&
&beans:beans xmlns="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd"&
&!-- Configures the @Controller programming model 必须加上这个,不然请求controller时会出现no mapping url错误--&
&mvc:annotation-driven /&
&!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/jsp directory --&
&beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"&
&beans:property name="prefix" value="/WEB-INF/view/" /&
&beans:property name="suffix" value=".jsp" /&
&/beans:bean&
&beans:bean id="multipartResolver"
class="org.springframework.monsMultipartResolver"
p:defaultEncoding="utf-8" /&
&!-- Imports user-defined @Controller beans that process client requests --&
&beans:import resource="controllers.xml" /&
&/beans:beans&
controllers.xml
&?xml version="1.0" encoding="UTF-8"?&
&beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd" default-autowire="byName"&
&!-- Maps '/' requests to the 'home' view
&mvc:view-controller path="*.do" view-name="home"/&--&
&!-- enable autowire --&
&context:annotation-config /&
&!--拦截器--&
&bean id="basedAccessInterceptor" class="com.core.Interceptor.BasedInterceptor"/&
&bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"&
&property name="interceptors"&
&ref bean="basedAccessInterceptor"/&
&/property&
&!-- 扫描业务组件 --&
&context:component-scan base-package="com.mvc.controller" /&
采纳的答案
原因在于当你使用:&mvc:annotation-driven /&
时,其实它已经注册了一个DefaultAnnotationHandlerMapping ,而后面你自己注册的
&bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"&
&property name="interceptors"&
&ref bean="basedAccessInterceptor"/&
&/property&
优先级没它内部的高,所以一直都不会调用你注册的拦截器。你可以通过: mvc:interceptors标签单独添加拦截器。spring论坛也有讨论:
参考:
中15.12 Configuring Spring MVC
拦截器要拦截的URL是什么没有写,比如:
&bean id="basedAccessInterceptor" class="com.core.Interceptor.BasedInterceptor"&
&property name="mappingURL" value="/xxx.do" /&
已解决问题
未解决问题SpringMVC4零配置--Web上下文配置【MvcConfig】 - []地址更新: - ITeye技术网站
博客分类:
与SpringSecurity的配置类似,spring同样为我们提供了一个实现类WebMvcConfigurationSupport和一个注解@EnableWebMvc以帮助我们减少bean的声明。
applicationContext-MvcConfig.xml
&!-- 启用注解,并定义组件查找规则 ,mvc层只负责扫描@Controller --&
&context:component-scan base-package="web.function"
use-default-filters="false"&
&context:include-filter type="annotation"
expression="org.springframework.stereotype.Controller" /&
&/context:component-scan&
&!-- 视图处理器 --&
&bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver"&
&property name="prefix" value="/WEB-INF/views/jsp/function/" /&
&property name="suffix" value=".jsp" /&
&!-- 定义国际化资源文件查找规则 ,各种messages.properties --&
&bean id="messageSource"
class="org.springframework.context.support.ResourceBundleMessageSource"
p:basename="config.messages.messages"&
&!-- servlet适配器,这里必须明确声明,因为spring默认没有初始化该适配器 --&
&bean id="servletHandlerAdapter"
class="org.springframework.web.servlet.handler.SimpleServletHandlerAdapter" /&
&!-- 定义文件上传处理器 --&
&bean id="multipartResolver"
class="org.springframework.monsMultipartResolver"
p:defaultEncoding="UTF-8" /&
&!-- 异常处理器 --&
&bean id="exceptionResolver" class="web.core.CP_SimpleMappingExceptionResolver"&
&property name="defaultErrorView" value="common_error" /&
&property name="exceptionAttribute" value="exception" /&
&property name="exceptionMappings"&
&prop key="java.lang.RuntimeException"&common_error&/prop&
&/property&
&!-- 定义公共参数初始化拦截器 --&
&bean id="initInterceptor" class="web.core.CP_InitializingInterceptor" /&
&!-- 本地化资源处理器 --&
&bean id="localeResolver"
class="org.springframework.web.servlet.i18n.CookieLocaleResolver" /&
&!-- 定义本地化变更拦截器 --&
&bean id="localeChangeInterceptor"
class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" /&
&!-- 请求拦截器,每一个用户请求都会被拦截 --&
&mvc:interceptors&
&ref bean="localeChangeInterceptor" /&
&ref bean="initInterceptor" /&
&/mvc:interceptors&
&!-- 定义注解驱动Controller方法处理适配器 ,注:该适配器必须声明在&mvc:annotation-driven /&之前,否则不能正常处理参数类型的转换 --&
class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"&
&property name="webBindingInitializer"&
&bean class="web.core.CP_PropertyEditorRegistrar"&
&property name="format" value="yyyy-MM-dd"&&/property&
&/property&
&property name="messageConverters"&
class="org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter" /&
class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" /&
&/property&
&!-- 会自动注册RequestMappingHandlerMapping与RequestMappingHandlerAdapter
两个bean,是spring MVC为@Controllers分发请求所必须的。 并提供了:数据绑定支持,@NumberFormatannotation支持,@DateTimeFormat支持,@Valid支持,读写XML的支持(JAXB),读写JSON的支持(Jackson) --&
&mvc:annotation-driven /&
&!-- 资源访问处理器 --&
&mvc:resources mapping="/static/**" location="/WEB-INF/static/" /&
MvcConfig.java
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "web.function", useDefaultFilters = false, includeFilters = {
@ComponentScan.Filter(type = FilterType.ANNOTATION, value = {Controller.class})
public class MvcConfig extends WebMvcConfigurationSupport {
private static final Logger logger = Logger
.getLogger(MvcConfig.class);
* 描述 : &注册试图处理器&. &br&
&使用方法说明&
public ViewResolver viewResolver() {
("ViewResolver");
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
viewResolver.setPrefix("/WEB-INF/views/jsp/function/");
viewResolver.setSuffix(".jsp");
return viewR
* 描述 : &注册消息资源处理器&. &br&
&使用方法说明&
public MessageSource messageSource() {
("MessageSource");
ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
messageSource.setBasename("config.messages.messages");
return messageS
* 描述 : &注册servlet适配器&. &br&
&只需要在自定义的servlet上用@Controller("映射路径")标注即可&
public HandlerAdapter servletHandlerAdapter(){
("HandlerAdapter");
return new SimpleServletHandlerAdapter();
* 描述 : &本地化拦截器&. &br&
&使用方法说明&
public LocaleChangeInterceptor localeChangeInterceptor(){
("LocaleChangeInterceptor");
return new LocaleChangeInterceptor();
* 描述 : &基于cookie的本地化资源处理器&. &br&
&使用方法说明&
@Bean(name="localeResolver")
public CookieLocaleResolver cookieLocaleResolver(){
("CookieLocaleResolver");
return new CookieLocaleResolver();
* 描述 : &注册自定义拦截器&. &br&
&使用方法说明&
public CP_InitializingInterceptor initializingInterceptor(){
("CP_InitializingInterceptor");
return new CP_InitializingInterceptor();
* 描述 : &RequestMappingHandlerMapping需要显示声明,否则不能注册自定义的拦截器&. &br&
&这个比较奇怪,理论上应该是不需要的&
public RequestMappingHandlerMapping requestMappingHandlerMapping() {
("RequestMappingHandlerMapping");
return super.requestMappingHandlerMapping();
* 描述 : &添加拦截器&. &br&
&使用方法说明&
* @param registry
protected void addInterceptors(InterceptorRegistry registry) {
// TODO Auto-generated method stub
("addInterceptors start");
registry.addInterceptor(localeChangeInterceptor());
registry.addInterceptor(initializingInterceptor());
("addInterceptors end");
* 描述 : &HandlerMapping需要显示声明,否则不能注册资源访问处理器&. &br&
&这个比较奇怪,理论上应该是不需要的&
public HandlerMapping resourceHandlerMapping() {
("HandlerMapping");
return super.resourceHandlerMapping();
* 描述 : &资源访问处理器&. &br&
&可以在jsp中使用/static/**的方式访问/WEB-INF/static/下的内容&
* @param registry
protected void addResourceHandlers(ResourceHandlerRegistry registry) {
("addResourceHandlers");
registry.addResourceHandler("/static/**").addResourceLocations("/WEB-INF/static/");
* 描述 : &文件上传处理器&. &br&
&使用方法说明&
@Bean(name="multipartResolver")
public CommonsMultipartResolver commonsMultipartResolver(){
("CommonsMultipartResolver");
return new CommonsMultipartResolver();
* 描述 : &异常处理器&. &br&
&系统运行时遇到指定的异常将会跳转到指定的页面&
@Bean(name="exceptionResolver")
public CP_SimpleMappingExceptionResolver simpleMappingExceptionResolver(){
("CP_SimpleMappingExceptionResolver");
CP_SimpleMappingExceptionResolver simpleMappingExceptionResolver= new CP_SimpleMappingExceptionResolver();
simpleMappingExceptionResolver.setDefaultErrorView("common_error");
simpleMappingExceptionResolver.setExceptionAttribute("exception");
Properties properties = new Properties();
properties.setProperty("java.lang.RuntimeException", "common_error");
simpleMappingExceptionResolver.setExceptionMappings(properties);
return simpleMappingExceptionR
* 描述 : &RequestMappingHandlerAdapter需要显示声明,否则不能注册通用属性编辑器&. &br&
&这个比较奇怪,理论上应该是不需要的&
public RequestMappingHandlerAdapter requestMappingHandlerAdapter() {
("RequestMappingHandlerAdapter");
return super.requestMappingHandlerAdapter();
* 描述 : &注册通用属性编辑器&. &br&
&这里只增加了字符串转日期和字符串两边去空格的处理&
protected ConfigurableWebBindingInitializer getConfigurableWebBindingInitializer() {
("ConfigurableWebBindingInitializer");
ConfigurableWebBindingInitializer initializer = super.getConfigurableWebBindingInitializer();
CP_PropertyEditorRegistrar register = new CP_PropertyEditorRegistrar();
register.setFormat("yyyy-MM-dd");
initializer.setPropertyEditorRegistrar(register);
:代码下载
浏览 51862
hanqunfeng
浏览: 1133732 次
来自: 北京
可以了,是因为没加intercept-url 的拦截, 尼玛, ...
请问为什么我配了security.xml后切入点不起作用(之前 ...
根据楼主的代码 继承了WebMvcConfigurationS ...
MvcConfig.java的FilterType.ANNOT ...
不明觉厉,,,

我要回帖

更多关于 springmvc 注解拦截器 的文章

 

随机推荐