Web 项目杂记(一)

1、Tomcat 多实例部署

在Tomcat下多实例部署后,发现如下问题,采用etc/init.d/tomcat start方式无法启动,而需要采用startup.sh。查找原因发现,是因为多实例部署时,重复jar加载造成tomcat内存配置不足,解决的方式是将共用的jar包放在tomcat的lib下,而工程只保留自有的。

2、防盗链

防盗链是指防止自己的链接,主要是图片链接等被其他服务器盗用访问。主要防止的手段是利用http中的referer,它是header的一部分,当浏览器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器基此可以获得一些信息用于处理。在JAVA的技术架构中,可以写一个拦截器,然后在拦截器中比对:

String referer = request.getHeader("referer"); 
  if (referer == null || !referer.contains(request.getServerName())) {

3、Token 防止重复提交

  3.1) 在返回表单提交页面的时候,在缓存中设置一个Token;

  3.2)请求的时候将这个Token作为隐藏参数带回来;

  3.3)在处理表单提交请求时,比对参数Token和缓存中表单的Token;这个Token可以存在session里,也可以是Redis等第三方缓存;

上述设置的结果是不刷新页面,将无法第二次提交表单;

PS: 该特性原来在H公司是作为安全基线之一,一般是前后端都提要求,后端用的也是Token的方案,由平台端统一封装,当时应该是存在session里。

4、防止恶意请求

思路是在拦截器里比较相同请求来源的间隔。

public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        HttpSession session = request.getSession();
        String preRequest = (String) session.getAttribute(PREREQUEST);
        Long preRequestTime = (Long) session.getAttribute(TIME);
        String url = request.getServletPath();
        if (preRequestTime != null && preRequest != null) { 
            if ((url.equals(preRequest) || allRequest)
                    && System.currentTimeMillis() - preRequestTime < minRequestIntervalTime) {
        //具体的处理
        }
        session.setAttribute(PREREQUEST, url);
        session.setAttribute(TIME, System.currentTimeMillis());
        return super.preHandle(request, response, handler);
    }
posted @ 2016-10-14 16:56  Fredric_2013  阅读(206)  评论(0编辑  收藏  举报