• 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);
        }
  • 相关阅读:
    综合实例-文本框类部件
    输入掩码
    WebP,Jpeg,Png格式图片的编解码区别
    美团点评提前批面经
    Android中AIDL的使用详解,如何发起回调?
    JNI在Android中的实践NDK:Hello World
    Timer实现原理
    百度秋招凉经:客户端测开
    阿里秋招面经:Android客户端开发工程师
    Picasso和Glide区别
  • 原文地址:https://www.cnblogs.com/Fredric-2013/p/5961142.html
Copyright © 2020-2023  润新知