Spring Boot学习之路——自定义拦截器

来源:互联网 发布:成都 银海软件 编辑:程序博客网 时间:2024/05/20 10:51

Spring Boot简介

Spring Boot很大程度上简化了基于Spring的应用开发,只需要调用“run”方法就可以创建一个独立的,产品级别的Spring应用。Spring Boot能够为所有Spring开发提供一个从根本上更快,且随处可得的入门体验;提供了一系列大型项目常用的飞功能性特征,比如:内嵌服务器,安全,指标,健康监测和外部化配置;绝对不会有代码生成,也不需要XML配置。

本文示例采用了eclipse、maven、Jdk 1.7等软件,数据持久层采用的是mybatis,数据库采用的mysql。


示例项目结构图

这里写图片描述

Spring Boot核心配置文件

#mysql配置项spring.datasource.platform=mysqlspring.datasource.url=jdbc:mysql://10.64.11.192:3306/appcv?useUnicode=true&characterEncoding=utf-8spring.datasource.username=rootspring.datasource.password=adminspring.datasource.driverClassName=com.mysql.jdbc.Driver# Advanced configuration...spring.datasource.max-active=50spring.datasource.max-idle=6spring.datasource.min-idle=2spring.datasource.initial-size=6#serverserver.port=8080server.session-timeout=30server.tomcat.uri-encoding=UTF-8#spring profilesspring.http.encoding.charset=UTF-8spring.http.encoding.enable=truespring.http.encoding.force=true#MyBatismybatis.typeAliasesPackage=com.zenglei.entity #定义别名  mybatis.mapperLocations=classpath:/mybatis/UserMapper.xml  #mybatis配置文件#log日志logging.level.com.zenglei=DEBUGlogging.file=logg.txt

项目依赖 pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">    <modelVersion>4.0.0</modelVersion>    <groupId>com.zenglei.changan</groupId>    <artifactId>springbootDemo</artifactId>    <packaging>war</packaging>    <version>0.0.1-SNAPSHOT</version>    <name>springbootDemo Maven Webapp</name>    <url>http://maven.apache.org</url>    <parent>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter-parent</artifactId>        <version>1.2.3.RELEASE</version>    </parent>    <dependencies>        <!--测试 -->        <dependency>            <groupId>junit</groupId>            <artifactId>junit</artifactId>            <scope>test</scope>        </dependency>        <!-- dom4j -->        <dependency>            <groupId>dom4j</groupId>            <artifactId>dom4j</artifactId>            <version>1.6.1</version>        </dependency>        <!-- Spring boot -->        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-web</artifactId>        </dependency>        <!-- myBatis -->        <dependency>            <groupId>org.mybatis.spring.boot</groupId>            <artifactId>mybatis-spring-boot-starter</artifactId>            <version>1.1.1</version>        </dependency>        <!-- mysql依赖 -->        <dependency>            <groupId>mysql</groupId>            <artifactId>mysql-connector-java</artifactId>        </dependency>        <!-- fastjson -->        <dependency>            <groupId>com.alibaba</groupId>            <artifactId>fastjson</artifactId>            <version>1.2.17</version>        </dependency>        <!-- jdbc -->        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-jdbc</artifactId>        </dependency>        <!-- redis -->        <dependency>            <groupId>redis.clients</groupId>            <artifactId>jedis</artifactId>        </dependency>        <!-- test -->        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-test</artifactId>            <scope>test</scope>        </dependency>        <!-- aop -->        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-aop</artifactId>        </dependency>        <dependency>            <groupId>com.jayway.jsonpath</groupId>            <artifactId>json-path</artifactId>            <scope>test</scope>        </dependency>    </dependencies>    <profiles>        <profile>            <id>production</id>            <dependencies>                <dependency>                    <groupId>commons-pool</groupId>                    <artifactId>commons-pool</artifactId>                    <type>pom.lastUpdated</type>                </dependency>            </dependencies>        </profile>    </profiles>    <build>        <pluginManagement>            <plugins>                <plugin>                    <groupId>org.apache.maven.plugins</groupId>                    <artifactId>maven-compiler-plugin</artifactId>                    <configuration>                        <source>1.7</source>                        <target>1.7</target>                    </configuration>                </plugin>                <plugin>                    <groupId>org.springframework.boot</groupId>                    <artifactId>spring-boot-maven-plugin</artifactId>                </plugin>            </plugins>        </pluginManagement>    </build></project>

Spring Boot主入口程序

只需要调用SpringApplication的static run方法,运行java application即可启动。

@SpringBootApplication@ComponentScan/** * SpringBoot主入口程序 * @author ZengL * */public class Application {    public static void main(String[] args) {        SpringApplication.run(Application.class, args);    }}

通过WebMvcConfigurerAdapter来配置拦截器

自定义类来继承WebMvcConfigurerAdapter,重写addInterceptors方法。

@Configurationpublic class WebMvcConfigurer extends WebMvcConfigurerAdapter {    @Override    public void addInterceptors(InterceptorRegistry registry) {        //super.addInterceptors(registry);        //拦截所有请求        registry.addInterceptor(new MyInterceptor()).addPathPatterns("/**");    }}

具体实现MyInterceptor拦截器

这个与Spring MVC类似,实现HandlerInterceptor接口,根据具体业务要求来分别重写afterCompletion、postHandle和preHandle三个方法。

public class MyInterceptor implements HandlerInterceptor{    /**     * 完成整个请求之后调用     */    @Override    public void afterCompletion(HttpServletRequest arg0,            HttpServletResponse arg1, Object arg2, Exception arg3)            throws Exception {        System.out.println("3333333333333333333");    }    /**     * 进入controller方法之后,渲染视图之前调用     */    @Override    public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1,            Object arg2, ModelAndView arg3) throws Exception {        System.out.println("2222222222222222222");    }    /**     * 进入controller方法之前调用     */    @Override    public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1,            Object arg2) throws Exception {        System.out.println("1111111111111111111");        return true;    }}

controller层

/** * 用户控制器 *  * @author ZengL *  */@RestController@RequestMapping(value = "/user")public class UserController {    private final Logger log = LoggerFactory.getLogger(UserController.class);    @Autowired    private IUserService userService;    @RequestMapping(value = "/addUser")    public void addUser(HttpServletRequest request , HttpServletResponse response) {        log.debug("REST request to add user");        String id = request.getParameter("id");        String userName = request.getParameter("userName");        String passWord = request.getParameter("passWord");        User user = new User();        String msg = null ;        if(id != null && id != ""){            user.setId(id);        }        if(userName != null && userName != ""){            user.setUserName(userName);        }        if(passWord != null && passWord != ""){            user.setPassWord(passWord);        }        try {            userService.addUser(user);            log.debug("添加成功!");            msg = "注册成功!";        } catch (Exception e) {            log.debug("添加异常!");            msg = "注册失败!";        }        try {            response.sendRedirect("/test.jsp");        } catch (IOException e) {            e.printStackTrace();        }    }    @RequestMapping(value = "/add")    public void add(HttpServletRequest request, HttpServletResponse response) {        log.debug("REST request to add user");        try {            response.sendRedirect("/login.jsp");        } catch (Exception e) {            e.printStackTrace();        }    }}

service实现

/** * 用户service实现类 * @author ZengL * */@Servicepublic class UserServiceImpl implements IUserService {    @Autowired    private IUserDao userDao;    @Override    public void addUser(User user) {        try {            userDao.addUser(user);        } catch (Exception e) {            throw e;        }    }    @Override    public void updateUser(User user) {        try {            userDao.updateUser(user);        } catch (Exception e) {            throw e;        }    }    @Override    public void deleteUser(String id) {        try {            userDao.deleteUser(id);        } catch (Exception e) {            throw e;        }    }    @Override    public User getUserByUserName(User user) {        User userR = null;        try {            userR = userDao.getUserByUserName(user);            return userR;        } catch (Exception e) {            throw e;        }    }}

dao层

注意IUserDao上的注解加的是@Mapper,这个与Spring MVC有点区别

/** * 用户dao层 * @author ZengL * */@Mapperpublic interface IUserDao {    /**     * 新增用户     * @param user     */    public void addUser(User user);    /**     * 更新用户     * @param user     */    public void updateUser(User user);    /**     * 删除用户     * @param id     */    public void deleteUser(String id);    /**     * 根据用户名查询用户     * @param user     * @return     */    public User getUserByUserName(User user);}

user实体类

/** * user实体类 * @author zengl * */public class User {    private String id;    private String userName;    private String passWord;    public String getId() {        return id;    }    public void setId(String id) {        this.id = id;    }    public String getUserName() {        return userName;    }    public void setUserName(String userName) {        this.userName = userName;    }    public String getPassWord() {        return passWord;    }    public void setPassWord(String passWord) {        this.passWord = passWord;    }}

mapper.xml配置

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" ><mapper namespace="com.zenglei.dao.IUserDao" >  <!--新增用户  -->  <insert id="addUser" parameterType="com.zenglei.entity.User" >    insert into zengTest (id, userName, passWord)    values (#{id,jdbcType=VARCHAR},            #{userName,jdbcType=VARCHAR},            #{passWord,jdbcType=VARCHAR})  </insert>  <!--更新用户  -->  <update id="updateUser" parameterType="com.zenglei.entity.User" >    update zengTest set   (userName = #{userName,jdbcType=VARCHAR},    passWord = #{passWord,jdbcType=VARCHAR})    <where>    id = #{id,jdbcType=VARCHAR}    </where>  </update>  <!--删除用户  -->  <delete id="deleteUser" parameterType="java.lang.String" >   delete from zengTest     <where>    id = #{id,jdbcType=VARCHAR}    </where>  </delete>  <!-- 根据用户名查询用户 -->  <select id="getUserByUserName" resultType="com.zenglei.entity.User" parameterType="com.zenglei.entity.User" >    select id , userName , passWord    from zengTest    <where>    userName = #{userName,jdbcType=VARCHAR}    </where>  </select></mapper>

数据库建表

CREATE TABLE `zengTest` (    `id` INT(11) NOT NULL AUTO_INCREMENT,    `userName` VARCHAR(50) NOT NULL,    `passWord` VARCHAR(50) NOT NULL,    PRIMARY KEY (`id`))

通过以上步骤,就可以自定义拦截器,这里为Spring Boot入门朋友提供一个简单教程,可快速上手Spring Boot,有什么问题欢迎大家留言,一起进步。
温馨提示:上述代码可以直接复制使用。

2 0
原创粉丝点击