springboot踩坑篇-01--@EnableWebMvc注解和@EnableAutoConfiguration 注解

springboot踩坑篇-01

springboot踩坑篇-01–@EnableWebMvc注解和@EnableAutoConfiguration 注解
问题出现

最近项目在用springboot开发,项目当中要用到spring的拦截器;
import java.util.Date;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;

import com.jcl.gycms.entity.LoginLogs;
import com.jcl.gycms.service.LoginLogsService;

/**

  • @author zpf

  • @version 1.0
    */
    @Component
    public class LoginInterceptor implements HandlerInterceptor {

    @Autowired
    private LoginLogsService loginLogsService;
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
    throws Exception {
    return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
    ModelAndView modelAndView) throws Exception {
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
    throws Exception {
    String username = (String) request.getSession().getAttribute(“isLogin”);
    if(StringUtils.isNotBlank(username)) {
    LoginLogs loginLogs = new LoginLogs();
    loginLogs.setLoginname(username);
    loginLogs.setLogintime(new Date());
    String localAddr = request.getLocalAddr();
    String ip = request.getRemoteAddr();
    System.out.println("–localAddr"+localAddr+"----ip"+ip);
    loginLogs.setLoginip(request.getLocalAddr());
    int i = loginLogsService.saveSelective(loginLogs);
    if(i>0) {
    System.out.println(“记录登录日志-----成功”);
    }
    }
    }
    }

在配置拦截器时用到了@EnableWebMvc
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.InterceptorRegistration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

/**

  • @author zpf

  • @version 1.0
    */
    @EnableWebMvc
    @Configuration
    public class LoginConfiguration extends WebMvcConfigurerAdapter{

    @Bean
    LoginInterceptor localInterceptor() {
    System.out.println(“将拦截器注册成bean”);
    return new LoginInterceptor();
    }
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
    System.out.println(“拦截登录了-------------------”);
    // 注册拦截器
    LoginInterceptor loginInterceptor = new LoginInterceptor();
    InterceptorRegistration loginRegistry = registry.addInterceptor(loginInterceptor);
    // 拦截路径
    loginRegistry.excludePathPatterns("/WEB-INF/jsp");
    loginRegistry.addPathPatterns("/adminLogin/**");

    }
    }

然后项目可以正常启动,但是当我访问项目是
在这里插入图片描述

查看后台发现报错Could not resolve view with name ‘index’ in servlet with name ‘dispatcherServlet’–路径映射不到,但是也没想到问题所在,于是只能问万能的度娘了
在这里插入图片描述
问题解决
参考了https://blog.youkuaiyun.com/testcs_dn/article/details/80249894微wx笑的博客发现是@EnableWebMvc这个注解的问题
在这里插入图片描述
使用 @EnableWebMvc 注解,需要以编程的方式指定视图文件相关配置;
使用 @EnableAutoConfiguration 注解,会读取 application.properties 或 application.yml 文件中的配置。

解决1
换成@EnableAutoConfiguration
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

/**

  • @author zpf

  • @version 1.0
    */
    @EnableAutoConfiguration
    @Configuration
    public class LoginConfiguration extends WebMvcConfigurerAdapter{

    @Bean
    LoginInterceptor localInterceptor() {
    System.out.println(“将拦截器注册成bean”);
    return new LoginInterceptor();
    }
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
    System.out.println(“拦截登录了-------------------”);
    // 注册拦截器
    LoginInterceptor loginInterceptor = new LoginInterceptor();
    InterceptorRegistration loginRegistry = registry.addInterceptor(loginInterceptor);
    // 拦截路径
    loginRegistry.excludePathPatterns("/WEB-INF/jsp");
    loginRegistry.addPathPatterns("/adminLogin/**");

    }
    }

然后得到解决,可以访问了
在这里插入图片描述

解决二
在入口类注入视图解析器

import javax.servlet.MultipartConfigElement;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.MultipartConfigFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
import tk.mybatis.spring.annotation.MapperScan;

@SpringBootApplication
@MapperScan({“com.jcl.gycms.mapper”})
public class GycmsApplication {
public static void main(String[] args) {
SpringApplication.run(GycmsApplication.class, args);
}
@Bean
public MultipartConfigElement multipartConfigElement() {
MultipartConfigFactory factory = new MultipartConfigFactory();
//单个文件最大
factory.setMaxFileSize(“10240KB”); //KB,MB
//设置总上传数据总大小
factory.setMaxRequestSize(“102400KB”);
return factory.createMultipartConfig();
}

@Bean
public InternalResourceViewResolver setupViewResolver() {
	InternalResourceViewResolver resolver = new InternalResourceViewResolver();
	/** 设置视图路径的前缀 */
	resolver.setPrefix("/WEB-INF/jsp/");
	/** 设置视图路径的后缀 */
	resolver.setSuffix(".jsp");
	return resolver;
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值