文档章节

kotlin使用spring mvc(一)

weidedong
 weidedong
发布于 2018/10/18 15:29
字数 446
阅读 14
收藏 1

过滤器Filter,是Servlet的一种技术。可通过Filter,对请求进行拦截,比如判断用户是否登录、验证黑名单等并且可对请求进行预处理。

接下来介绍使用WebFilter配置过滤器并实现读取cookie判断用户是否登陆

编写Filter类

/注册器名称为customFilter,拦截的url为所有
@WebFilter(filterName = "customFilter",urlPatterns = ["/*"])
class CustomFilter:Filter {
    var logger = LoggerFactory.getLogger(this::class.java)!!
    override fun destroy() {
        logger.info("CustomFilter destroy")
    }

    override fun doFilter(request: ServletRequest?, response: ServletResponse?, chain: FilterChain?) {

        val httpServletRequest = request as? HttpServletRequest
        if (httpServletRequest != null && response != null) {
            //获取用户cookie
            val userCookie = httpServletRequest.cookies?.firstOrNull { it.name?.toLowerCase() == "userid" }
            //检查cookie的正确性
            val userId = userCookie?.value?.toIntOrNull() ?: 0
            if(userId <= 0){
                val accept = httpServletRequest.getHeader("Accept")
                if (accept?.contains("json") == true) {
                    response.contentType = MediaType.APPLICATION_JSON_VALUE
                    val str = ObjectMapperExtension.instance.writeValueAsString(CommonResult(null, false, "No Access Token"))
                    response.writer.print(str)

                } else {
                    response.contentType = MediaType.ALL_VALUE
                    response.writer.print("No Access Token")
                }
                return
            }
        }
        logger.info("CustomFilter start")
        chain?.doFilter(request,response)
        logger.info("CustomFilter complete")
    }

    override fun init(filterConfig: FilterConfig?) {
        logger.info("CustomFilter init")
    }
}

然后在启动类加入@ServletComponentScan注解,确保可以扫描到CustomFilter

@SpringBootApplication
@ServletComponentScan
class Demo1Application

fun main(args: Array<String>) {
    runApplication<Demo1Application>(*args)
}

随便请求一下,发现返回,我们的过滤器生效了

HTTP/1.1 200
Content-Type: */*;charset=ISO-8859-1
Content-Length: 15
Date: Thu, 18 Oct 2018 07:23:58 GMT

No Access Token

那么试一下接受json格式,添加请求头

Accept: application/json

返回了我们想要的json

HTTP/1.1 200
Content-Type: application/json;charset=ISO-8859-1
Content-Length: 52
Date: Thu, 18 Oct 2018 07:27:08 GMT

{"data":null,"succes":false,"msg":"No Access Token"}

如果加上Cookie(如下),那么就可以正常通过我们的过滤器了

Cookie: userid=3;

© 著作权归作者所有

共有 人打赏支持
weidedong
粉丝 4
博文 90
码字总数 28742
作品 0
深圳
私信 提问
Spring Framework 5.0 对 Kotlin 支持的介绍

继几个月前公布 Kotlin 已在 start.spring.io 中受支持后,我们继续努力以实现 Spring 和 Kotlin 的更好共存。Kotlin 的一个重要的特性是能与 Java 库很好地互用,但想要在 Spring 中编写原汁...

oschina
2017/01/12
7.1K
13
用Kotlin在IntelliJ Idea中无法生成 spring-configuration-metadata.json 文件

问题描述 在百度搜索关键词,搜索到了 Stack Overflow 有相关问题 spring-configuration-metadata.json file is not generated in IntelliJ Idea for Kotlin @ConfigurationProperties class ......

JerrySimple
2018/10/12
0
0
《 Kotlin + Spring Boot : K2EE 服务端开发实战 》

《 Kotlin + Spring Boot : K2EE 服务端开发实战 》 第一篇 Spring Boot 基础 第1章 Spring Boot 与 Kotlin 的极简理念 第2章 Spring Boot + Kotlin 快速开始 Hello World 第3章 Spring Boo...

程序员诗人
2017/11/02
0
0
【Spring Boot 实战开发】第3讲 Kotlin扩展函数

Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程。在 Java 开发领域的诸多著名框架:Spring 框架及其衍生框架、做缓存Redis、消息...

程序员诗人
2018/04/20
0
0
【Spring Boot 开发实战】第1讲 Kotlin 的极简特性之:隐式类型与函数式编程

《Spring Boot 开发实战》—— 基于 Gradle + Kotlin 的企业级应用开发最佳实践 Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程。...

程序员诗人
2018/04/18
0
0

没有更多内容

加载失败,请刷新页面

加载更多

刚入职阿里,告诉你真实的职场生活,兼谈P6、P7、P8的等级

一:拿下offer的人,基本上都有什么特征? 二:为什么选择阿里? 三:阿里的工作氛围什么样? 四:阿里的薪资情况? 五:阿里的晋升空间有多大? 最近部门招聘,很多工程师,包括我在内都参与...

java知识分子
13分钟前
1
0

中国龙-扬科
16分钟前
1
0
深入理解定时器系列第一篇——理解setTimeout和setInterval

很长时间以来,定时器一直是javascript动画的核心技术。但是,关于定时器,人们通常只了解如何使用setTimeout()和setInterval(),对它们的内在运行机制并不理解,对于与预想不同的实际运行状...

Jack088
19分钟前
1
0
windows 安装nvm

1、nvw-windows的官网:https://github.com/coreybutler/nvm-windows/releases 2、选择nvm-setup.zip安装 3、配置环境变量 4、检查nvm是否安装成功 使用管理员权限打开一个命令行。输入nvm v...

灰白发
29分钟前
1
0
MySQL

慢日志查询作用 慢日志查询的主要功能就是,记录sql语句中超过设定的时间阈值的查询语句。例如,一条查询sql语句,我们设置的阈值为1s,当这条查询语句的执行时间超过了1s,则将被写入到慢查...

士兵7
31分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部