SpringBoot消失的Web.xml

Filter 过滤器作为web.xml中重要的一部分,有着相当高的出场率,SpringBoot会默认注册几个Filter ApplicationContextHeaderFilter CharacterEncodingFilter 如果添加了Security依赖的话会加入SpringSecurityFilterChain 如果加入Actuator依赖的话就会加入WebRequestTraceFilter 实现自己的Filter JavaConfig注册Bean 我们如果自己要实现自己的Filter的话,需要实现Filter并实现其中的方法 同时要利用JavaConfig的方法来配置,一般情况下需要编写@Bean注解的返回值为FilterRegistrationBean的方法来实现JavaBean的注册 具体实现如下 需要注意的是此方法需要在被@Configuration注解的配置类中 @WebFilter+@ServletComponentScan 如果觉得Java代码的方式比较繁琐的话可以采用注解方式注册Filter,具体实现方式是在Filter实现类加入@WebFilter注解 例如 然后在SpringBootApplication类上添加@ServletComponentScan Filter的注册原理 我们采用JavaConfig的形式实现了Filter的注册,通过向上追溯得知FilterRegistrationBean的层级结构如下 ServletContextInitializer RegistrationBean AbstractFilterRegistrationBean FilterRegistrationBean 经查阅SpringBoot文档发现针对ServletContextInitializer的描述如下 Interface used to configure a Servlet 3.0+ context programmatically. Unlike WebApplicationInitializer, classes that implement this interface (and do not implement WebApplicationInitializer) will not be detected by SpringServletContainerInitializer and hence will not be automatically bootstrapped by the Servlet container. This interface is primarily designed to allow ServletContextInitializers to be managed by Spring and not the Servlet container. ...

2019年3月19日 · 1 分钟 · 天边的星星

Mybatis Generator 无法生成selectByPrimaryKey、deleteByPrimaryKey、updateByPrimaryKey MySQL

问题现象: 最近因为一张表新加了字段,重新使用 mybatis-generator 生成了一下mapper文件,结果发现新生成的文件比之前少了xxxByPrimaryKey 的几个方法,对应的xml文件中同样也少了这几个, 并且xml文件中的resultMap节点里主键id使用的是result标签,而不是id标签。 排查原因: 首先想到的是:难道表没有主键了,于是赶紧检查了一下我的表结构,发现主键没有问题呀!表结构并没有大的变化,我仅仅是加了一个普通字段而已,那怎么会这样呢? 然后我又检查了generatorConfig.xml中table项中的属性 enableSelectByPrimaryKey=”true” enableUpdateByPrimaryKey=”true” enableDeleteByPrimaryKey=”true” 看看这几个属性是否被设置成了false,默认的值是true。 发现也没有问题,这里配置也没有改动过! 唯一想到的变化是mysql连接器版本进行了升级: mysql mysql-connector-java 5.1.35 /** 升级版本 **/ mysql mysql-connector-java 8.0.11 将版本改回去重新试了下果然就可以了。那么可以确信就是 mysql-connector-java 版本升级造成的问题! 解决方法: 很纳闷为什么升级了高版本反而有问题了呢,想到这既然是普遍问题,那应该别人早就遇到过这个问题了,网上搜了下,果然很多人在问这个问题。 最终看到一篇文章找到了解决方法: 在jdbcConnection节点里配置useInformationSchema属性,可以解决mybatis-generator不识别主键问题: 参考文章:https://my.oschina.net/u/2289161/blog/1589630 另外还看到有人说:如果使用的mysql驱动5.x版本的就可以生成,使用6.x 及以上的,那就无法生成了,必须显式设置:useInformationSchema=”true” 说明一下,我使用的maven插件版本是 1.3.5 org.mybatis.generator mybatis-generator-maven-plugin 1.3.5 src/test/resources/generatorConfig.xml true ——————— 参考:https://blog.csdn.net/rchm8519/article/details/81949916

2019年1月29日 · 1 分钟 · 天边的星星

命令行打包 war文件

根据自己项目的真实情况需要注意配置jdk环境,如果jdk环境不同可能造成打出的war包不能正常运行。例如 项目使用jdk1.7 打包使用javac必须为jdk1.7中的javac命令,tomcat需要配置执行的jdk环境为1.7。如果电脑使用的和项目使用的是同一个jdk,配置路径可以省略,其他情况不能省略。 命令行打包 war文件 echo 准备java文件 dir *.java/s/b > source.txt if exist out\classes ( echo 清理中… rd /S/Q out ) echo 清理中完成 md out\classes md out\webapp echo 编译源码 set JAVA_HOME=D:\Program Files\Java\jdk1.7.0_75 %JAVA_HOME%\bin\javac -cp .;E:\apache-tomcat-8.5.35\lib*;E:\apache-tomcat-8.5.35\bin*;E:\auto_test\zchfaxgb\src\main\webapp\WEB-INF\lib* -d out\classes -encoding utf-8 @source.txt echo 复制webapp目录 xcopy src\main\webapp out\webapp /s/e/i/y echo 创建编译源码路径 md out\webapp\WEB-INF\classes echo 复制classes目录 xcopy out\classes out\webapp\WEB-INF\classes /s/e/i/y echo 复制resources目录 xcopy src\main\resources out\webapp\WEB-INF\classes /s/e/i/y echo 开始打包 cd out\webapp echo 打包中 jar -cvf zcjf.war * move zcjf.war ../../ echo 打包完成 pause ...

2018年12月24日 · 1 分钟 · 天边的星星

Nginx 301重定向域名

## 为何要使用301重定向 在网站建设中需要网页重定向的情况很多:如网页目录结构变动,网页重命名、网页的扩展名改变、网站域名改变等。如果不做重定向,用户的收藏和搜索引擎数据库中的旧地址只能让访客得到一个404错误信息页面,访问流量白白丧失。不仅如此,之前该页面的一切积累(比如PR值)就都白费了。 301重定向不仅能使页面实现自动跳转,对于搜索引擎来说,也可能可以传递PR值。   **nginx重定向规则详细介绍**   [http://www.jefflei.com/post/1015.html](http://www.jefflei.com/post/1015.html) **rewrite命令** nginx的rewrite相当于apache的rewriterule(大多数情况下可以把原有apache的rewrite规则加上引号就可以直接使用),它可以用在server,location 和IF条件判断块中,命令格式如下: rewrite 正则表达式 替换目标 flag标记 flag标记可以用以下几种格式: last – 基本上都用这个Flag。 break – 中止Rewirte,不在继续匹配 redirect – 返回临时重定向的HTTP状态302 permanent – 返回永久重定向的HTTP状态301 例如下面这段设定nginx将某个目录下面的文件重定向到另一个目录,2对应第二个括号(.)中对应的字符串: location /download/ { rewrite ^(/download/.)/m/(.).. 1/nginx-rewrite/2.gz break; } **nginx重定向的IF条件判断** 在server和location两种情况下可以使用nginx的IF条件判断,条件可以为以下几种: 正则表达式 如: 匹配判断 ~ 为区分大小写匹配; !~为区分大小写不匹配 ~* 为不区分大小写匹配;!~为不区分大小写不匹配 例如下面设定nginx在用户使用ie的使用重定向到/nginx-ie目录下: if (http_user_agent ~ MSIE) { rewrite ^(.*) /nginx-ie/$1 break; } **文件和目录判断 ** -f和!-f判断是否存在文件 -d和!-d判断是否存在目录 -e和!-e判断是否存在文件或目录 -x和!-x判断文件是否可执行 例如下面设定nginx在文件和目录不存在的时候重定向: if (!-e $request_filename) { proxy_pass http://127.0.0.1/; } ...

2018年12月10日 · 5 分钟 · 天边的星星

tomcat配置301重定向

tomcat默认情况下不带www的域名是不会跳转到带www的域名的,而且也无法像apache那样通过配置.htaccess来实现。如果想要把不带“www’的域名重定向到带”www”域名下,又不想写代码,可以使用UrlRewriteFilter来实现。 1.简介 urlRewriteFilter是一个用于改写URL的Web过滤器,类似于Apache的mod_rewrite。适用于任何Web应用服务器(如 Tomcat,jboss,jetty,Resin,Orion等)。其典型应用就把动态URL静态化,便于搜索引擎爬虫抓取你的动态网页。 2.下载 下载UrlRewriteFilter wget http://urlrewritefilter.googlecode.com/files/urlrewritefilter-4.0.3.jar 并放入tomcat的 WEB-INF/lib下 3.配置tomcat 编辑WEB-INF/web.xml 在其它servlet mapping前加入 <filter-name>UrlRewriteFilter</filter-name> <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class> </filter> <filter-mapping> <filter-name>UrlRewriteFilter</filter-name> <url-pattern>/*</url-pattern> <dispatcher>REQUEST</dispatcher> <dispatcher>FORWARD</dispatcher> </filter-mapping>" data-snippet-id="ext.d9335c889eb8c29f7d0586484daf2dcb" data-snippet-saved="false" data-codota-status="done">&lt;filter&gt; &lt;filter-name&gt;UrlRewriteFilter&lt;/filter-name&gt; &lt;filter-class&gt;org.tuckey.web.filters.urlrewrite.UrlRewriteFilter&lt;/filter-class&gt; &lt;/filter&gt; &lt;filter-mapping&gt; &lt;filter-name&gt;UrlRewriteFilter&lt;/filter-name&gt; &lt;url-pattern&gt;/*&lt;/url-pattern&gt; &lt;dispatcher&gt;REQUEST&lt;/dispatcher&gt; &lt;dispatcher&gt;FORWARD&lt;/dispatcher&gt; &lt;/filter-mapping&gt; 4.添加跳转规则 在WEB-INF下新建urlrewite.xml文件,加入跳转规则 <rule> <name>seo redirect</name> <condition name=&quot;host&quot; operator=&quot;notequal&quot;>^www.example.com</condition> <condition name=&quot;host&quot; operator=&quot;notequal&quot;>^localhost</condition> <from>^/(.*)</from> <to type=&quot;permanent-redirect&quot; last=&quot;true&quot;>http://www.example.com/$1</to> </rule> </urlrewrite>" data-snippet-id="ext.8be7c6714e65fa3f79b0e1c6c6215563" data-snippet-saved="false" data-codota-status="done">&lt;urlrewrite&gt; &lt;rule&gt; &lt;name&gt;seo redirect&lt;/name&gt; &lt;condition name="host" operator="notequal"&gt;^www.example.com&lt;/condition&gt; &lt;condition name="host" operator="notequal"&gt;^localhost&lt;/condition&gt; &lt;from&gt;^/(.*)&lt;/from&gt; &lt;to type="permanent-redirect" last="true"&gt;http://www.example.com/$1&lt;/to&gt; &lt;/rule&gt; &lt;/urlrewrite&gt; 参考文章 http://nematodes.org/martin/2010/02/04/301-permanent-redirect-with-tomcat-howto/ ...

2018年12月10日 · 1 分钟 · 天边的星星

Java AES256加密解密实现

import it.sauronsoftware.base64.Base64; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; import java.security.Security; import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; import org.bouncycastle.jce.provider.BouncyCastleProvider; /** java实现AES256加密解密 依赖说明: bcprov-jdk15-133.jar:PKCS7Padding javabase64-1.3.1.jar:base64 local_policy.jar 和 US_export_policy.jar需添加到%JAVE_HOME%\jre\lib\security中(lib中版本适合jdk1.7) */ public class AES256 { public static byte[] encrypt(String content, String password) { try { //”AES”:请求的密钥算法的标准名称 KeyGenerator kgen = KeyGenerator.getInstance(“AES”); //256:密钥生成参数;securerandom:密钥生成器的随机源 SecureRandom securerandom = new SecureRandom(tohash256Deal(password)); kgen.init(256, securerandom); //生成秘密(对称)密钥 SecretKey secretKey = kgen.generateKey(); //返回基本编码格式的密钥 byte[] enCodeFormat = secretKey.getEncoded(); //根据给定的字节数组构造一个密钥。enCodeFormat:密钥内容;”AES”:与给定的密钥内容相关联的密钥算法的名称 SecretKeySpec key = new SecretKeySpec(enCodeFormat, “AES”); //将提供程序添加到下一个可用位置 Security.addProvider(new BouncyCastleProvider()); //创建一个实现指定转换的 Cipher对象,该转换由指定的提供程序提供。 //”AES/ECB/PKCS7Padding”:转换的名称;”BC”:提供程序的名称 Cipher cipher = Cipher.getInstance(“AES/ECB/PKCS7Padding”, “BC”); ...

2018年12月9日 · 2 分钟 · 天边的星星

轻量级微服务架构下总结

轻量级的微服务 总结:整个微服务使用Spring boot + Docker 冰山上,ZooKeeper服务注册、Node.js服务网关、Jenkins等冰山下。 总体上可以分为:开发框架(上)、容器技术(上)、注册中心(下)、调用中心、部署中心、日志中心、监控中心、追踪中心、消息中心、配置中心。 注册中心:用于注册微服务相关配置信息的中心 调用中心:用于提供给前端调用的统一入口(我们选用Node.js实现) 部署中心:用于编译并打包微服务源码并将其部署到Docker引擎中(Jenkins) 日志中心:用于收集并管理微服务应用程序中产生的日志 监控中心:用于监控微服务的实时运行状况 追踪中心:用于最终微服务的调用轨迹 消息中心:用于解耦服务之间的调用关系 配置中心:用于管理微服务应用程序所需的配置参数 (我们认为,中心分为两类:一类是含有业务意义的中心,另一类是不含业务意义的中心-只是技术层面的中心) 微服务日志 总结:docker中查看日志路径 /var/lib/docker/containers/<container_id目录看到一个container_id-json.log文件,Docker默认使用docker logs查看的就是这些json文件,Docker默认使用Json-file格式,还有其他格式 none:容器不输出任何日志 json-file:容器默认输出的日志以json格式写入文件中(默认) syslog:容器输出日志写入宿主机的Syslog中 journald:容器输出日志写入宿主机的Journald中 gelf:容器输出的日志以GELF(Graylog Extended log fromat)格式写入Graylog中 fluentd: 容器输出的日志写入宿主机的Fluentd中 awalogs:容器输出日志写入Ammazon CloudWatch Logs中 splunk:容器输出日志写入splunk中 etwlogs:容器输出日志写入ETW (event tracing for windows)中 gcplogs:容器输出日志写入GCP(Google Cloud Platform)中 nats:容器输出日志写入NATS服务器中 docker中 –log-driver参数配置日志驱动 –log-opt max-size –log-opt max-file 分别设置日志文件大小和日志文件数量 例如:docker run -p 80:80 –log-dirver json-file –log-opt max-size=10m –log-opt max-file=3 –name xxx 容器名称 docker日志驱动(https://docs.docker.com/engine/admin/logging/overview/) ...

2018年8月26日 · 1 分钟 · 天边的星星

Java 执行运行Jar文件

java执行jar文件命令 java -jar 文件.jar 到此就成功执行jar了, 我的jar中有多个入口,我想执行其他的入口,怎么搞? 不着急慢慢看下去 java运行jar包中指定Class的main方法,这时可以通过: java -cp xxx.jar xxx.com.xxxx [args] 其中-cp命令是将xxx.jar加入到classpath,这样java class loader就会在这里面查找匹配的类。 mac中执行apple script运行jar的命令 on run {input, parameters} set p to POSIX path of (path to me) do shell script “java -jar ” & p & “Contents/Jar/JavaSwingTest.jar” end run

2017年12月5日 · 1 分钟 · 天边的星星

Java + 腾讯企业邮箱 + javamail发送邮件

搞了一上午终于搞定了腾讯云企业邮箱的发送,话说腾讯云的东西就是繁琐,但是好用,还是得认真看文档啊,不然真的摸不着北。 腾讯企业邮箱官网:http://exmail.qq.com 点击开通 你跟着步骤走就行了,没啥难的,如果你没有域名,你就去买一个呗,也花不了多少钱的。 注册成功后,是这个页面,并且会有一个弹窗告诉你一些信息 现在你点击添加成员,因为你不添加成员的话你是无法发送邮件的。 完成后是这样 然后你打开腾讯企业邮箱登录界面,输入你刚才增加的成员邮箱的:登录名 + 密码,进去后是一个类似于普通QQ邮箱的界面 第一次进去会要求重新设置密码,设置一下就好了。默认的已经开通了SSL协议; 如何设置IMAP、POP3/SMTP及其SSL加密方式? 如果您的电子邮件客户端支持SSL,可以在设置中选择使用SSL。 <div> </div> <div> <div> <div> <div> **通用配置参数:** </div> <div> **(我们已经默认都支持这些协议,用户无需自己手动开启这些服务器与端口)** </div> <div> </div> <div> **POP3/SMTP协议** <div> <div> 接收邮件服务器:pop.exmail.qq.com ,使用SSL,端口号995 </div> <div> 发送邮件服务器:smtp.exmail.qq.com ,使用SSL,端口号465 </div> <div> 海外用户可使用以下服务器 </div> <div> <div> 接收邮件服务器:hwpop.exmail.qq.com ,使用SSL,端口号995 </div> <div> 发送邮件服务器:hwsmtp.exmail.qq.com ,使用SSL,端口号465 </div> </div> <div> </div> <div> <div> **IMAP协议** </div> <div> <div> 接收邮件服务器:imap.exmail.qq.com ,使用SSL,端口号993 </div> <div> <div> 发送邮件服务器:smtp.exmail.qq.com ,使用SSL,端口号465 </div> <div> 海外用户可使用以下服务器 </div> <div> <div> 接收邮件服务器:hwimap.exmail.qq.com ,使用SSL,端口号993 </div> <div> <div> 发送邮件服务器:hwsmtp.exmail.qq.com ,使用SSL,端口号465 </div> <div> </div> </div> </div> </div> </div> </div> </div> </div> </div> <div> <div> <div> <div> **账户名:**您的企业邮箱账户名,账户名需要填写完整的邮件地址 </div> <div> **密码:**您的企业邮箱密码 </div> <div> **电子邮件地址:**您的企业邮箱的完整邮件地址 </div> <div> </div> <div> 使用SSL协议之前,请您先参考[常用客户端的一般配置方式](http://service.exmail.qq.com/cgi-bin/help?subtype=1&&id=28&&no=1000585): </div> </div> </div> </div> </div> </div> 使用java代码发送邮箱 ...

2017年12月5日 · 1 分钟 · 天边的星星

SpringBoot 学习网站收藏

Spring Boot加载配置文件 https://my.oschina.net/wangyuefive/blog/704615#h3_4 问题3:如何根据线上环境和线下环境加载不同的配置?如何加载多个配置文件? 1、Profiles: Spring Profiles提供了一种隔离应用程序配置的方式,并让这些配置只能在特定的环境下生效。在配置文件中,用spring.profiles.active属性来指定特定环境的配置文件。在Spring Boot中多环境配置文件名需要满足application-{profile}.properties的格式,其中{profile}对应你的环境标识,比如: application-dev.properties:开发环境 application-test.properties:测试环境 application-prod.properties:生产环境 至于哪个具体的配置文件会被加载,需要在application.properties文件中通过spring.profiles.active属性来设置,其值对应{profile}值。例如: application.properties配置:spring.profiles.active = dev即指定application-dev.properties会被加载。 2、通过启动参数指定运行环境。 通过命令行启动: ` java -jar xxxxx.jar &lt;span class="hljs-comment">--spring.profiles.active=prod。&lt;/span>` 上述指定为prod环境,则spring application会自动根据application-{profile}.properties的格式找到application-prod.properties文件加载。 3、加载多个自定义文件。 例如: ` spring.profiles.active = dev,database` 等于告诉Spring Boot加载application-dev.properties和application-database.properties文件,从而实现多个配置文件的加载。 四种读取properties文件的方式 http://www.imooc.com/article/18252 集成Mybatis http://www.imooc.com/article/15406 开启定时任务 http://www.imooc.com/article/15612 spring-boot上传文件MultiPartFile获取不到文件问题解决 http://blog.csdn.net/happy_cheng/article/details/54178392 Spring boot上传文件时MultipartFile为空问题 http://blog.csdn.net/tanga842428/article/details/72773773 spring boot默认日志配置,以及改用log4j日志配置学习使用排出多余的依赖 http://blog.csdn.net/yanweihpu/article/details/54139382 http://blog.csdn.net/loongshawn/article/details/50951329

2017年9月20日 · 1 分钟 · 天边的星星