- 浏览: 94046 次
- 性别:
- 来自: 南京
最新评论
-
u010011083:
请问,JKSUtil.getInstance().getKey ...
使用RSA密钥生成JWT -
18318726484:
你应该把导入的包也写在上面,这样更直观!
Spring使用FastJson作为消息转换器时,不能使用Swagger的问题
文章列表
前端以REST的方式上传图片时,Sprintboot服务器出现以下异常:
The multi-part request contained parameter data (excluding uploaded files) that exceeded the limit for maxPostSize set on the associated connector.
参考该链接:http://stackoverflow.com/questions/33232849/increase-http-post-maxpostsize-in-spring-boot
需要同时修改以下两个配置 ...
使用iptables配置的频率非常低,但每次都要查一下资料,还是比较麻烦的。其实命令看起来繁琐,还是有规律可记的。
首先,iptables --help 下,看下大概的命令参数。
添加进入规则:
iptables -A [chainname] -p [tcp] --dport [8081] -j ACCEPT
其中chainname,常用的就是INPUT,OUTPUT两种,通过iptables -L 可以查看到。入口规则,填INPUT。--dport填下访问的端口。
添加出口规则:
iptables -A OUTPUT -p tcp --s ...
我们在开发、测试环境中,日志的级别通常设置为DEBUG。部署到生产环境时,别经常被设置为INFO级别,以减少日志的输出量。但DEBUG时可以看到的一些请求、响应参数,也就看不到了。为了方便排查一些线上问题,需要记录下请求、响应的参数等。
有多种方式可以实现该需求,如添加Filter,手动记录日志等。这儿使用一个简单的方式,直接将DEUBG级别时的请求、响应内容输出出来。系统是使用logback来记录日志的,直接在logbak.xml中将请求、响应处理类的日志级别调整为DEBUG即可。
<logger name="org.apache.coyote.http11.Htt ...
在内部系统上调用基础服务时,在基础服务上加上OAuth验证,基于Spring boot OAuth2.0实现,采用JsonWebToken的方式。accessToken由调用者自己生成,基于RSA生成私钥签名,基础服务公钥验证。
accessToken的生成采用开源的JJWT实现,基础服务的OAuth由spring-security-oauth2框架来自动实现(见:http://godjohnny.iteye.com/blog/2320220)。
生成accessToken的步骤:
1、生成密钥库文件。
使用keytool。具体过程略。
2、使 ...
因为Fast作为JSON的序列化与反序列化一些优点,在项目中使用了FastJson库的FastJsonHttpMessageConverter4 作为Spring的消息转换器,可替换后,发现http://localhost:8081/swagger-ui.html页面能打开,但API内容都不见了。但v2/api-docs倒是能打开。
替换回Spring默认的Jackson2,页面打开正常。经过抓包,发现使用不同的转换器时,页面打开请求的URL是不同的。使用FastJson时,到swagger-resources/configuration/ui请求后,就结束了。而默认的Jacks ...
一、Spring Boot:定制HTTP消息转换器
http://www.jianshu.com/p/ffe56d9553fd
参考资料:
http://heidloff.net/article/usage-of-swagger-2-0-in-spring-boot-applications-to-document-apis/
http://jakubstas.com/spring-jersey-swagger-create-documentation/#.WAcMhvl96Cp
http://springfox.github.io/springfox/
备忘几个常用的注解:
1、@ApiIgnore 用于屏蔽一些不想在文档中显示的接口
2、tag的使用
有一些接口定义,写在不同的Controller中,但在 ...
一次项目实施过程中,发现线上的Spring boot在启动时,耗时非常长。在日志中发现这样的情况:
o.a.c.util.SessionIdGeneratorBase : Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [170,241] milliseconds.
查找相关资料,发现是随机数生成器的问题。需要在启动命令里加上
-Djava.security.egd=file:/dev/./urandom
参考资料: https://spring.io/guides/gs/spring-boot-docker/
首先,修改build.gradle,在dependencies中添加gradle-docker:
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
[b]classpath('se.transmode.gradle:gradle-docker:1.2')[/b]
}
再添加插件:
...
参考资料:
http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html
http://projects.spring.io/spring-security-oauth/docs/oauth2.html
https://tools.ietf.org/html/rfc6749
https://tools.ietf.org/html/rfc6750
http://tutorials.jenkov.com/oauth2/index.html
http://stackoverflow.com/questions/12296017/how-to-valida ...
在现实项目中,经常出现用户登录验证时,需要验证除了用户名、密码外的其他项,或额外的验证逻辑。当使用Spring Security框架时,就需要修改默认的验证方式。当以form表单方式登录时,可以有两种方式实现,任意实现一种即可。以Restful的方式提交JSON格式参数登录时或Restful,form方式混用时,可以两种方式结合使用。
第一种方式,自定义AuthenticationProvider。这种方式在authenticate(Authentication authentication)方法中实现验证逻辑。supports方法返回true,才会执行authenticate方 ...
参考资料:
http://my.oschina.net/denglz/blog/487332?p={{page}}
http://elrepo.org/tiki/tiki-index.php
网上有不少升级CentOS内核的文章,如《CentOS 6.5 升级内核到 3.10.28》,大部分都是下载源码编译,有点麻烦。
在yum的ELRepo源中,有mainline(3.13.1)、long-term(3.10.28)这2个内核版本,考虑到long-term更稳定,会长期更新,所以选择这个版本。
1、导入public key
rpm --import ht ...
项目部署到生产服上后,发现一个定时器任务的Bean在指定时间连续执行了两次。加日志调试发现这个Bean被初始化了两次,再进一步添加日志调试发现Web的启动类,也就是AbstractAnnotationConfigDispatcherServletInitializer的子类也被执行了两次。而在开发环境的IDE中测试时,则没有这种现象。于是怀疑是Tomcat的问题,但开发环境与生产环境的版本一致,只有开发环境中对Tomcat对根路径做了修改。
参照:http://www.lxway.com/206659492.htm 提供的方法:
引用方法1:不配置根路径访问
方法2:将路径已出web ...
使用Intellij Ideal中Create new project --> Spring Initializr创建一个基于Spring boot的项目。但默认的这个项目是基于eclipse的,需要修改下build.gradle:
1 删除最底部关于eclipse的classpath部分
2 我这边的网络压根连不上repo1.maven.org/maven2。因此,修改了两处repositories为如下格式:
repositories {
//mavenCentral()
maven {
url "http://repo ...
参考自:http://www.jianshu.com/p/1cb4c4fe5481
# Sets the target folders and the final framework product.
# 如果工程名称和Framework的Target名称不一样的话,要自定义FMKNAME
# 例如: FMK_NAME = "MyFramework"
FMK_NAME=${PROJECT_NAME}
# Install dir will be the final output to the framework.
# The following line creat ...