Spring boot进阶-配置Controller、interceptor...
1、配置SpringBootApplication(对spring boot来说这是最基本)
package io.github.syske.springboot31;
import org.springframework.boot.Banner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Configuration;
@Configuration
@SpringBootApplication
public class SpringBoot31Application {
public static void main(String[] args) {
//SpringApplication.run(SpringBoot31Application.class, args);
SpringApplication application = new SpringApplication(SpringBoot31Application.class);
//关闭banner,也可以通过在resouces文件夹下添加banner.txt替换banner,banner生成网站
// http://patorjk.com/software/taag/#p=testall&h=0&f=Chiseled&t=syske
application.setBannerMode(Banner.Mode.OFF);
application.run(args);
}
}
2、创建配置类
完整配置
package io.github.syske.springboot31.config;
import io.github.syske.springboot31.formatter.DateFomaters;
import io.github.syske.springboot31.interceptor.SessionInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.format.FormatterRegistry;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class Webconfig implements WebMvcConfigurer {
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/user/login.html").setViewName("login");
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new SessionInterceptor())
.addPathPatterns("/**")
.excludePathPatterns("/login","/user/login.html","/bootsrap/**");
}
@Override
public void addFormatters(FormatterRegistry registry) {
//给当前的Spring容器中添加自定义格式转换器.
registry.addConverter(new DateFomaters());
}
}
3、配置Controller
controller是在配置类中添加的
- 主要是针对一些仅需要返回页面的Controller,如果需要model操作则不适用
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/user/login.html").setViewName("login");
}
- 主要是通过addViewController方法进行添加,方法中传入的是访问的路径,上面配置的访问路径为:http://localhost:8080/user/login.html, setViewName方法设置的是返回的视图名,我的配置对应的是login.html
- 方法内可以配置多个视图模型
4、配置DateFomatters
自定义的convertor
package io.github.syske.springboot31.formatter;
import org.springframework.core.convert.converter.Converter;
import org.springframework.util.StringUtils;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateFomaters implements Converter<String, Date> {
@Override
public Date convert(String source) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date date = null;
if(!StringUtils.isEmpty(source)) {
try {
date = dateFormat.parse(source);
} catch (ParseException e) {
e.printStackTrace();
}
}
return date;
}
}
将自定义的转化类添加到Spring boot配置中
@Override
public void addFormatters(FormatterRegistry registry) {
//给当前的Spring容器中添加自定义格式转换器.
registry.addConverter(new DateFomaters());
}
5、配置拦截器(Interceptor)
自定义拦截器
package io.github.syske.springboot31.interceptor;
import org.springframework.web.servlet.mvc.WebContentInterceptor;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class SessionInterceptor extends WebContentInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws ServletException {
Object username = request.getSession().getAttribute("username");
if(username != null) {
return true;
} else {
try {
request.getRequestDispatcher("/user/login.html").forward(request,response);
} catch (IOException e) {
e.printStackTrace();
}
return false;
}
}
}
将自定义的拦截器添加到Spring boot配置中
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new SessionInterceptor())
.addPathPatterns("/**")
.excludePathPatterns("/login","/user/login.html","/bootsrap/**");
}
6、测试
登录拦截测试,以及格式化打印
package io.github.syske.springboot31.controller;
import org.springframework.stereotype.Controller;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.servlet.http.HttpSession;
import java.util.Date;
@Controller
public class LoginController {
@RequestMapping("/login")
public String login(String username, Date logindate, HttpSession session) {
if(!StringUtils.isEmpty(username)) {
session.setAttribute("username", username);
System.out.println(logindate);
return "index";
}
return "login";
}
}
Spring boot进阶-配置Controller、interceptor...的更多相关文章
- 玩转spring boot——properties配置
前言 在以往的java开发中,程序员最怕大量的配置,是因为配置一多就不好统一管理,经常出现找不到配置的情况.而项目中,从开发测试环境到生产环境,往往需要切换不同的配置,如测试数据库连接换成生产数据库连 ...
- Spring Boot 揭秘与实战 附录 - Spring Boot 公共配置
Spring Boot 公共配置,配置 application.properties/application.yml 文件中. 摘自:http://docs.spring.io/spring-boot ...
- Spring Boot 日志配置
Spring Boot 日志配置 默认日志 Logback: 默认情况下,Spring Boot会用Logback来记录日志,并用INFO级别输出到控制台.在运行应用程序和其他例子时,你应该已经看到很 ...
- Spring boot 零配置开发微服务
2018年12月29日星期六 体验Spring boot 零配置开发微服务 1.为什么要用Spring boot? 1.1 简单方便.配置少.整合了大多数框架 1.2 适用于微服务搭建,搭建的微服务 ...
- Spring Boot 属性配置&自定义属性配置
在使用spring boot过程中,可以发现项目中只需要极少的配置就能完成相应的功能,这归功于spring boot中的模块化配置,在pom.xml中依赖的每个Starter都有默认配置,而这些默认配 ...
- Spring boot 自动配置自定义配置文件
示例如下: 1. 新建 Maven 项目 properties 2. pom.xml <project xmlns="http://maven.apache.org/POM/4 ...
- Spring Boot + Mybatis 配置多数据源
Spring Boot + Mybatis 配置多数据源 Mybatis拦截器,字段名大写转小写 package com.sgcc.tysj.s.common.mybatis; import java ...
- Spring Boot属性配置&自定义属性配置
一.修改默认配置 例1.spring boot 开发web应用的时候,默认tomcat的启动端口为8080,如果需要修改默认的端口,则需要在application.properties 添加以下记录: ...
- Spring Boot Web 开发@Controller @RestController 使用教程
在 Spring Boot 中,@Controller 注解是专门用于处理 Http 请求处理的,是以 MVC 为核心的设计思想的控制层.@RestController 则是 @Controller ...
随机推荐
- S3C2440开发环境搭建(Ubuntu)
我的操作系统是 Ubuntu 1404.可以使用下面的命令查看系统的版本: cat /etc/issue 安装.配置.启动 ftp 服务 sudo apt-get install vsftpd 修改 ...
- Unity3D版本之我见
关心Unity版本的变化以及了解未来版本的内容是专业做Unity的同学必备的功课,下面我来说一下我对4.0以后版本的一些见解. v4.0: 这个版本比3.5有较大的跳跃,首先最大卖点是新的动作系统Me ...
- Flask之RESTful
5.4 Restful 2000年,Roy Thomas Fielding博士在他的博士论文<Architectural Styles and the Design of Network-bas ...
- Django Rest Framework 4
目录 一.分页 二.视图 三.路由 四.渲染器 一.分页 试问如果当数据量特别大的时候,你是怎么解决分页的? 方式a.记录当前访问页数的数据id 方式b.最多显示120页等 方式c.只显示上一页,下一 ...
- Tornado 高并发源码分析之二---Tornado启动和请求处理流程
Tornado 服务器启动流程 因为Tornado 里使用了很多传类的方式,也就是delegate,之所以要这么做,其实和 iOS 开发那样,也很多的 delegate, 如此来实现高度解耦,但是比较 ...
- JAVA 用axis1 调用.NET的web service
1.去官网下载axis的jar包,我下的是1.4版本的 http://axis.apache.org/axis/java/releases.html 2.JAVA 代码: public void my ...
- MySQL(数据库)
数据库概念: 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库在实际应用中会遇到各式各样的数据库如nosql非关系数据库(memcached,redis,mangodb),RDBM ...
- CRM客户关系管理系统知识点总结
一.项目需求(使用PrecessOn) 二.models.py from django.db import models from django.contrib.auth.models import ...
- A Recipe for Training Neural Networks [中文翻译, part 1]
最近拜读大神Karpathy的经验之谈 A Recipe for Training Neural Networks https://karpathy.github.io/2019/04/25/rec ...
- SpringBoot15 sell01 项目创建、MySQL数据库连接、日志配置、开发热部署、商品信息模块
项目软件版本说明: jdk: 1.8 springboot: 2.0.1 mysql: 5.7 1 项目创建 创建一个SpringBoot项目即可,创建是勾选 web jpa mysql 这三个依赖就 ...