Arganzheng's Blog

stay hungry, stay foolish

如何在系统启动时完成资源加载

背景 在我们的应用中,经常有这样的场景,就是需要在应用启动的时候就预先加载某些资源,如果加载失败,应用都不需要启动了。这些资源的加载,我们都会把他们封装在一个类的loadResource方法中。关键是这个方法如何在系统初始化的时候被调用。一般有两种方式。 法一:通过Spring触发loadResource方法 如果这个类是通过Spring加载的,那么可以让Spring初始化之后直接调用...

XSS注入防御

成因 会提交有害参数,作用是把一些跳转,js等代码放进页面中执行,一般参数都会先闭合一些标签,然后加入有害的代码,比如下面的参数:back_text=%22%27%3E%3C/title%3E%3Cimg%09src=javascript:alert%28/XSS/%29%3E,这个其实是 "'></title><img src=javascript:alert(/...

CSRF防御

什么是CSRF攻击 这个网上一大把解释,直接google就可以了。这里就不赘述了。 如何防御 目前对CSRF的基本都是一种处理方式——使用token校验。简单来说,就是对于每一个需要做CSRF检查的请求(一般是POST请求),服务端会根据一定的策略分配一个token(或者前端js生成。比较少见,因为这样token的算法暴露了。当然如果token需要的输入攻击者拿不到的话,问题不大。),...

Spring使用@value annotation注入property变量和环境变量

@Value("#{welife.rpc.sendCoupon.api}") private String sendCouponApi; @Value("#{systemProperties['env']}") private String env; Spring 3.0之后支持$语法,即@Value("${welife.rpc.sendCoupon.api}...

Content-Type头部

content-type是一个非常重要的HTTP Header,设置错误的话,浏览器端是没有办法正常显示的。作为API容器,需要根据format来定义content-type,并且强制使用UTF-8。 package me.arganzheng.study.api.container.controller; @Controller public class ApiDispatcher {...

MySQL字符串比较大小写问题

刚刚才知道MySQL的varchar类型比较默认是忽略大小写的,还忽略最后的空格。C.5.5.1. Case Sensitivity in String Searches mysql> SELECT 'a' = 'A'; -> 1 解决方案是使用BINARY操作符10.1.7.7. The BINARY Operator mysql> SELECT BINA...

Java Heap OOM问题

今天线上API机器出问题了,很多机器告警,tomcat重启不久又挂掉。 看了一下日志,发现是OOM了: java.lang.OutOfMemoryError: Java heap space Dumping heap to java_pid21673.hprof ... Heap dump file created [1934558576 bytes in 8.670 secs] [Un...

Config File In Web Application

配置文件串串SHOW catalog: true 2009–18 星期四 热 一、有哪些配置文件 入口配置文件:web.xml;由web或应用服务器为每个web项目加载的配置文件。 应用上下文:包括web框架特有配置文件:如struts的struts-config.xml(或struts2的struts.xml)文件和SpringMVC的${dispatcherServlet...

已知一个java类,如何知道其在哪个jar包

比如我们想知道HeadApiProtocol.class在哪个jar包,路径在哪里,可以这么处理: System.out.println(HeadApiProtocol.class.getProtectionDomain().getCodeSource().getLocation()); 打印结果是: file:/D:/code/api_metadata_proj/target/ap...

如何下载文件

// File file = xxx InputStream inStream = new FileInputStream(file); try { String fileName = file.getName(); response.setHeader("Content-Disposition", "attachment; filename=" + fileName); /...