分类 后端 中的文章

使用Jsoup处理富文本XSS攻击过滤

由于富文本的特殊性,不能一刀切将所有的 HTML 标签转义,但为了防止 XSS 攻击, 又必须过滤掉其中的 JS 代码, 在 Java 中使用 Jsoup 正好可以满足此要求。 Jsoup 采用白名单过滤的方式,只允许配置的白名单标签进行提交,故需要好好整理一下,到底哪些标签是可以使用的。 实现 <dependency> <groupId>org.jsoup</groupId> <artifactId>jsoup</artifactId> <version>1.9.2</version> </dependency> import org.jsoup.Jsoup import org.jsoup.nodes.Document import org.jsoup.safety.Whitelist fun main() { // 使用预置的白名单 //val……

阅读全文

RestTemplate 跳过SSL证书验证

在使用RestTemplate请求接口的过程中,遇到HTTPS请求又没有证书的情况,只能通过配置来忽略证书验证了 package com.ewei.custom.yto.config import org.springframework.context.annotation.Bean import org.springframework.context.annotation.Configuration import org.springframework.http.client.ClientHttpRequestFactory import org.springframework.http.client.SimpleClientHttpRequestFactory import org.springframework.web.client.RestTemplate import java.net.HttpURLConnection import java.security.SecureRandom import java.security.cert.X509Certificate import javax.net.ssl.HttpsURLConnection import javax.net.ssl.SSLContext import javax.net.ssl.SSLSocketFactory import javax.net.ssl.X509TrustManager /** * @author wuwenze * @date 2019-06-21 */ @Configuration class RestTemplateClientConfig { @Bean fun restTemplate(factory: ClientHttpRequestFactory): RestTemplate { return RestTemplate(factory) } @Bean fun simpleClientHttpRequestFactory(): ClientHttpRequestFactory { val factory = SkipSSLSimpleClientHttpRequestFactory() factory.setReadTimeout(30000) factory.setConnectTimeout(30000) return factory } class SkipSSLSimpleClientHttpRequestFactory : SimpleClientHttpRequestFactory() { override fun prepareConnection(connection: HttpURLConnection, httpMethod: String) { if (connection is HttpsURLConnection) { try { connection.setHostnameVerifier { _, _……

阅读全文

Kotlin 单例模式详解

单例模式很熟悉了,在Java中有各种创建姿势,算是比较麻烦的,这里就不再赘述了。 Object 那么如何在kotlin中实现单例模式呢?请看代码 object JsonObjectMapper { } 仅需简单的把class关键字替换为object就完成了! // Kotlin 调用 JsonObjectMapper // Java调用 JsonObjectMapper.INSTANCE 究竟Kotlin封装了什么细节?让我们一探究竟吧: 通过Too……

阅读全文

Quartz失火指令、补偿执行机制配置

处理规则 调度(scheduleJob)或恢复调度(resumeTrigger,resumeJob)后不同的misfire对应的处理规则如下: CronTrigger withMisfireHandlingInstructionDoNothing 不触发立即执行 等待下次Cron触发频率到达时刻开始按照Cron频率依次执行 withMisfireHandlingInstructionIgnoreMisfires 以错过的第一个频率时间立刻开始执行 重做错过的所有频率周期后 当……

阅读全文

解决HttpServletRequest.inputStream复用问题

众所周知,request对象中的inputStream只能读取一次,下次再读就没有了,在一些场景中,这种特性是不适用的:比如需要在拦截器中读取请求体,然后做相关的参数校验,做完校验后请求打到Controller中就读取不到了。 解决的方法很简单,通过HttpServletReque……

阅读全文

MockMvc WebFilter不生效问题解决

在SpringBoot项目中,配置了一个@WebFilter,正常启动没问题,但是通过MockMvc进行单元测试死活不生效 @Configuration @Order(1) @WebFilter(urlPatterns = ["/**"]) class HttpServletRequestWrapperFilter : Filter { override fun doFilter(req: ServletRequest?, resp: ServletResponse?, chain: FilterChain?) { when (req) { is HttpServletRequest -> chain?.doFilter(MyHttpServletRequestWrapper(req), resp) else -> chain?.doFilter(req, resp) } } } 后来搞了半天,原来在构建MockMvc对象时,需要手动添加过滤器,这坑爹的玩意儿。 @Before fun setUp() {……

阅读全文

MySQL7新特性之JSON数据类型

从MySQL 5.7.8开始,原生提供了一个JSON类型的数据格式,在此之前类似的需求都是需要通过VARCHAR的方式来存储处理的。 JSON数据类型,拥有自动校验格式功能; 提供操作JSON数据的内置函数; 优化的存储格式,存储在JSON列中的JSON数据被转换成内部的存储格式,允许快……

阅读全文

Canal数据同步中间件初探

MySQL本身是支持主从模式(Master/Slave)的,Master产生的日志(binary log)中记录了所有增删改语句,将日志发送到Slave执行即可完成数据库的增量数据同步操作。 Canal是阿里巴巴开源的一个中间件,他的作用就是解析binary log来完成数据同步的。 源……

阅读全文

SpringBoot与Vue前后端分离最佳实践

前后端分离的开发模式大家都很清楚了,甚是麻烦: 前端启动webpack-dev-server 后端启动接口服务 开启代理服务器,前端通过代理服务器请求后端接口(解决跨域问题) 但是这些东西对于后端来说,太麻烦了,直接把前端打包好的dist文件丢到后端静态服务器里面就好了。 至于前端的web……

阅读全文

Kotlin杀手级特性-空安全

Kotlin相对于Java来说,有一个显著的特点,就是它致力于消除空引用所带来的危险,在Java中,为了避免NullPointerException的出现,我们需要不厌其烦的使用if (value != null) {} 来处理这种问题(虽然在JDK8之后有了更好的方式) 在Kotlin中很好解决了这个问题,下面……

阅读全文