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
- Spring Boot学习之路——自定义拦截器
- spring boot之拦截器
- Spring Boot学习之旅:(九)拦截器
- Spring Boot 学习系列之拦截器,实现用户登录拦截
- spring boot框架学习8-【干货】spring boot的web开发(4)-自定义拦截器处理权限
- Spring boot之登录拦截器
- Spring boot之拦截器的实现
- Spring Boot 拦截器之验证登录
- spring boot 拦截器之WebMvcConfigurerAdapter
- Spring Boot 拦截器
- Spring Boot 拦截器
- Spring Boot 拦截器
- Spring Boot 拦截器
- Spring Boot 拦截器
- Spring Boot 拦截器
- Spring-Boot拦截器
- spring boot 拦截器
- Spring Boot拦截器
- BZOJ 1185 [HNOI2007]最小矩形覆盖
- Linux
- checkbox 设置复选框的只读不让用户勾选
- MVC框架之从零开始(二)
- 封装mvc框架【二】
- Spring Boot学习之路——自定义拦截器
- Command /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift
- wechat-小程序(hello world)分析
- Matlab基础知识
- 利用Java自带的MD5加密
- 等高线如何和卫星地图叠加
- 【Linux】Linux下设置IP、掩码、网关
- iOS 保存图片或者视图到本地相册
- Fragment的存在与理解