精华内容
下载资源
问答
  • 基于Spring Security+Spring MVC的web应用,为了防止跨站提交攻击,通常会配置csrf,即: ...如果应用中有Post方式访问的Rest服务(参考下面的代码),会很不幸的发现,所有POST方式请求的服务会调用失败。 1

    基于Spring Security+Spring MVC的web应用,为了防止跨站提交攻击,通常会配置csrf,即:

    1     <http ...>
    2         ...
    3         <csrf />        
    4     </http>

    如果应用中有Post方式访问的Rest服务(参考下面的代码),会很不幸的发现,所有POST方式请求的服务会调用失败。

    复制代码
    1     @RequestMapping(value = "/user/create", method = RequestMethod.POST)
    2     @ResponseBody
    3     public UserInfo createUser(@RequestBody(required = true) UserInfo user,
    4             HttpServletRequest request, HttpServletResponse response)
    5             throws Exception {
    6         ...
    7     }
    复制代码

    原因在于:启用csrf后,所有http请求都被会CsrfFilter拦截,而CsrfFilter中有一个私有类DefaultRequiresCsrfMatcher

    复制代码
     1     private static final class DefaultRequiresCsrfMatcher implements RequestMatcher {
     2         private Pattern allowedMethods = Pattern.compile("^(GET|HEAD|TRACE|OPTIONS)$");
     3 
     4         /* (non-Javadoc)
     5          * @see org.springframework.security.web.util.matcher.RequestMatcher#matches(javax.servlet.http.HttpServletRequest)
     6          */
     7         public boolean matches(HttpServletRequest request) {
     8             return !allowedMethods.matcher(request.getMethod()).matches();
     9         }
    10     }
    复制代码

    从这段源码可以发现,POST方法被排除在外了,也就是说只有GET|HEAD|TRACE|OPTIONS这4类方法会被放行,其它Method的http请求,都要验证_csrf的token是否正确,而通常post方式调用rest服务时,又没有_csrf的token,所以校验失败。

    解决方法:自己弄一个Matcher

    复制代码
     1 package com.cnblogs.yjmyzz.utils;
     2 
     3 import java.util.List;
     4 import java.util.regex.Pattern;
     5 
     6 import javax.servlet.http.HttpServletRequest;
     7 
     8 import org.springframework.security.web.util.matcher.RequestMatcher;
     9 
    10 public class CsrfSecurityRequestMatcher implements RequestMatcher {
    11     private Pattern allowedMethods = Pattern
    12             .compile("^(GET|HEAD|TRACE|OPTIONS)$");
    13 
    14     public boolean matches(HttpServletRequest request) {
    15 
    16         if (execludeUrls != null && execludeUrls.size() > 0) {
    17             String servletPath = request.getServletPath();
    18             for (String url : execludeUrls) {
    19                 if (servletPath.contains(url)) {
    20                     return false;
    21                 }
    22             }
    23         }
    24         return !allowedMethods.matcher(request.getMethod()).matches();
    25     }
    26 
    27     /**
    28      * 需要排除的url列表
    29      */
    30     private List<String> execludeUrls;
    31 
    32     public List<String> getExecludeUrls() {
    33         return execludeUrls;
    34     }
    35 
    36     public void setExecludeUrls(List<String> execludeUrls) {
    37         this.execludeUrls = execludeUrls;
    38     }
    39 }
    复制代码

    这里添加了一个属性execludeUrls,允许人为排除哪些url。

    然后在配置文件里,这样修改:

    复制代码
     1     <http entry-point-ref="loginEntryPoint" use-expressions="true">
     2         ...
     3         <intercept-url pattern="/rest/**" access="permitAll" />
     4         ...
     5         <csrf request-matcher-ref="csrfSecurityRequestMatcher"/>        
     6     </http>
     7     
     8     <beans:bean id="csrfSecurityRequestMatcher" class="com.cnblogs.yjmyzz.utils.CsrfSecurityRequestMatcher">
     9         <beans:property name="execludeUrls">
    10             <beans:list>
    11                 <beans:value>/rest/</beans:value>
    12             </beans:list>
    13         </beans:property>
    14     </beans:bean>
    复制代码

    这里约定所有/rest/开头的都是Rest服务地址,上面的配置就把/rest/排除在csrf验证的范围之外了.

    展开全文
  • 基于Spring Security+Spring MVC的web应用,为了防止跨站提交攻击,通常会配置csrf,即: ...如果应用中有Post方式访问的Rest服务(参考下面的代码),会很不幸的发现,所有POST方式请求的服务会调用失败。 1

    基于Spring Security+Spring MVC的web应用,为了防止跨站提交攻击,通常会配置csrf,即:

    1     <http ...>
    2         ...
    3         <csrf />        
    4     </http>

    如果应用中有Post方式访问的Rest服务(参考下面的代码),会很不幸的发现,所有POST方式请求的服务会调用失败。

    复制代码
    1     @RequestMapping(value = "/user/create", method = RequestMethod.POST)
    2     @ResponseBody
    3     public UserInfo createUser(@RequestBody(required = true) UserInfo user,
    4             HttpServletRequest request, HttpServletResponse response)
    5             throws Exception {
    6         ...
    7     }
    复制代码

    原因在于:启用csrf后,所有http请求都被会CsrfFilter拦截,而CsrfFilter中有一个私有类DefaultRequiresCsrfMatcher

    复制代码
     1     private static final class DefaultRequiresCsrfMatcher implements RequestMatcher {
     2         private Pattern allowedMethods = Pattern.compile("^(GET|HEAD|TRACE|OPTIONS)$");
     3 
     4         /* (non-Javadoc)
     5          * @see org.springframework.security.web.util.matcher.RequestMatcher#matches(javax.servlet.http.HttpServletRequest)
     6          */
     7         public boolean matches(HttpServletRequest request) {
     8             return !allowedMethods.matcher(request.getMethod()).matches();
     9         }
    10     }
    复制代码

    从这段源码可以发现,POST方法被排除在外了,也就是说只有GET|HEAD|TRACE|OPTIONS这4类方法会被放行,其它Method的http请求,都要验证_csrf的token是否正确,而通常post方式调用rest服务时,又没有_csrf的token,所以校验失败。

    解决方法:自己弄一个Matcher

    复制代码
     1 package com.cnblogs.yjmyzz.utils;
     2 
     3 import java.util.List;
     4 import java.util.regex.Pattern;
     5 
     6 import javax.servlet.http.HttpServletRequest;
     7 
     8 import org.springframework.security.web.util.matcher.RequestMatcher;
     9 
    10 public class CsrfSecurityRequestMatcher implements RequestMatcher {
    11     private Pattern allowedMethods = Pattern
    12             .compile("^(GET|HEAD|TRACE|OPTIONS)$");
    13 
    14     public boolean matches(HttpServletRequest request) {
    15 
    16         if (execludeUrls != null && execludeUrls.size() > 0) {
    17             String servletPath = request.getServletPath();
    18             for (String url : execludeUrls) {
    19                 if (servletPath.contains(url)) {
    20                     return false;
    21                 }
    22             }
    23         }
    24         return !allowedMethods.matcher(request.getMethod()).matches();
    25     }
    26 
    27     /**
    28      * 需要排除的url列表
    29      */
    30     private List<String> execludeUrls;
    31 
    32     public List<String> getExecludeUrls() {
    33         return execludeUrls;
    34     }
    35 
    36     public void setExecludeUrls(List<String> execludeUrls) {
    37         this.execludeUrls = execludeUrls;
    38     }
    39 }
    复制代码

    这里添加了一个属性execludeUrls,允许人为排除哪些url。

    然后在配置文件里,这样修改:

    复制代码
     1     <http entry-point-ref="loginEntryPoint" use-expressions="true">
     2         ...
     3         <intercept-url pattern="/rest/**" access="permitAll" />
     4         ...
     5         <csrf request-matcher-ref="csrfSecurityRequestMatcher"/>        
     6     </http>
     7     
     8     <beans:bean id="csrfSecurityRequestMatcher" class="com.cnblogs.yjmyzz.utils.CsrfSecurityRequestMatcher">
     9         <beans:property name="execludeUrls">
    10             <beans:list>
    11                 <beans:value>/rest/</beans:value>
    12             </beans:list>
    13         </beans:property>
    14     </beans:bean>
    复制代码

    这里约定所有/rest/开头的都是Rest服务地址,上面的配置就把/rest/排除在csrf验证的范围之外了.

    展开全文
  • 现代市场营销理论具有其先天性的理论缺陷和无法解决矛盾。电子商务的产生和完善对现代营销理论的基本缺陷进行了补正,破解了传统的营销方式难以解决的企业与市场对接的难题。
  • 化解矛盾就要知道矛盾的根源,事实上在很多产品研发体系下,产品经理和程序员因为思考方式、关注范围、职能职责的差异,导致了沟通上的困难。化解的方法有以下几点: 1. 换位思考,理解、肯定、..

    自从有产品经理和程序员这样两个职位配合工作开始, 就一直不怎么和谐,一个巴掌拍不响,都不是善茬。在产品经理眼里程序员啥也不是,这么简单的需求都实现不了,而在程序员的眼中,产品经理就是SB,一天天的瞎搞需求,给戴上“产品狗”的帽子。谁也不鸟谁,产品经理和程序员在极端情况下,有一方会罢工,而公司在很多情况下显得非常的无奈。要化解矛盾就要知道矛盾的根源,事实上在很多产品研发体系下,产品经理和程序员因为思考方式、关注范围、职能职责的差异,导致了沟通上的困难。化解的方法有以下几点:

    1. 换位思考,理解、肯定、尊重,这3个词或许非常的空,但确确实实是一个非常好的方子。静下心来走近程序员,听听他们的心声、他们的抱怨,或许产品经理和程序员的距离将不再是那么遥远。 而程序员呢也要给产品提供自己的建议,而不是仅仅做一个编程的机器,很多程序员对产品也是非常热爱的、有独特的想法,虽然多数又局限于技术情节对产品的建议常常被忽视。但让程序员都参与到产品中,通过自己的专长改变产品,进而打磨出一款完美的产品。

    2. 尽量选择技术出身的产品经理,沟通的问题主要存在“信息不对称“、”沟通的语言不对称“、”思考角度不对称“,以及”考核的标准不对称“等。把几个因素抽取出来剖析,发现还是由于我们看问题的视角的高度不一致造成的。产品经理只是看到自己得到了商业的需求,策划了产品的需求,接下来会把很多事情抛给程序员做了,而技术出身的产品经理,看待问题的视眼会广很多,有共同的语言和明白同频的专业术语,做的项目需求,可以让程序员明白了为什么要做,对这一些需求的优先级更有认知,表达需求的方式让程序员更明白,也可以合理的划定开发时间点。适当的时候,理解程序员的工作,有时还会帮助程序员做一些申请或让步。

    3. 不要在制度上成为矛盾的制造者,现在当产品经理,好的决定都做不了,开发又不是自己做,夹在老板和程序员之间,如果让老板满意,就要给程序员压力,而又不是程序员的领导,下达的任务安排,极易产生矛盾。程序员也会有这样的意识,项目有问题是程序员的事儿,做的好了产品经理领功。所以在制度上可以明确授权产品为开发部的二级领导,其实就可以缓解一些类似的矛盾。例如,公司的创始人一般都是最大的产品经理,如果直接兼任产品经理,和程序员沟通是不是不会产生矛盾呢?

    其实仔细的分析一下,产品经理和程序员打交道的过程中不管是共性的因素还是个性的因素,也不是想象中那么困难。通过一些努力之后,我们总是会找到一些产品和程序员快速建立沟通桥梁的办法。

    展开全文
  • 最近在项目里面遇到一个比较难以解决的问题,简单的说就是查询问题。 某一张表的数据量比较大,很多业务都会根据条件来查询相关的数据,查询主要分为两类,一类是业务查询,能够根据指定的条件查询出相关的数据,...

    最近在项目里面遇到一个比较难以解决的问题,简单的说就是查询问题。

    某一张表的数据量比较大,很多业务都会根据条件来查询相关的数据,查询主要分为两类,一类是业务查询,能够根据指定的条件查询出相关的数据,数据量比较小,查询速度快,一类是后台查询,偏向数据分析,特点是查询耗时长,查询数据量比较大。
    由于大量系统访问这个数据库,那么对数据源连接的实时性要求就比较高,如果后台查询大量占用数据源的连接,会影响到外部业务,从而影响业务功能的稳定性。
     
    如何解决这个问题,在一般的情况下,我们首先会考虑设置一个合理的超时时间,由于业务查询都是大多是根据关键字查询,耗费时间都会在几十毫秒之下,很少会有大量长耗时的sql,后台的查询耗时比较长,如果设置较小的查询超时时间,会导致无法查询出来结果。那么就根据后台的查询耗时的平均时间,设置一个合理值。这种做法相对来说比较简单,但是会有潜在的风险。可能在默写特殊情况下,业务的查询也会存在热点数据,就是根据这些业务关键字的查询普遍耗时比较长,如果业务系统短时间内大量的热点数据查询,则会占用大量的数据源连接,从而影响正常的业务。尤其是在查询系统无法评估有那些潜在的长耗时查询的时候,系统就处于这种不可预测的有风险的阶段。
     
    第二种方案,就是简单的区分这两种查询。我们先解决的问题是后台查询超时的问题,如果采用上面的方案,则会影响其他的业务系统。那么可以考虑把影响面局限于后台查询。把问题所涉及到的关注点进行分离。就是长耗时和短耗时的问题,那么就配置两个数据源,一个负责提供给业务系统,超时时间设置短一点,连接数设置大一点,一个负责提供给后台查询系统,连接数设置小一点,超时时间设置长一点。通过这种方式,能够把缩小影响面,也能够解决目前的问题。
     
    从上面的一个简单的案例分析,在任何一个系统里面,都存在矛盾的两个方面(也可能存在多个方面)。解决这个矛盾有两个思路,第一个思路是通过两方对话和博弈使其达到一个均衡的过程。在不同的维度进行平衡,比如稳定性和复杂性,安全性和简单性,从不同的角度去考虑,通过加权和降权的方式使其达成一个平衡。还有一个考虑的思路就是对矛盾进行分离,单独进行处理,就是所谓的关注点分离。
     
    类似上面的案例还有很多,我们所说的分层模式,也是把一个大系统中不同层面的所具备的特性不一致,并且有很多矛盾。拿我们最经常使用三层模式:web层,biz层,dal层举例,web层变化非常频繁,同时要快速的满足需求,biz层变化相对来说比web层少,而dal层则不容易变化。分层模式主要是利用系统中不同关注点所面对的问题,每个层次的特性明显不同,这些都是可以才哟过分层的思路来设计。从系统分层到架构分层,都可以看到其背后隐藏着系统内部的矛盾。
     
     
    不止在IT领域的系统设计存在这个问题,在组织架构上也面临着同样的问题。大公司都会存在一套特定的业务流程满足公司内所有的部门。但有一些部门涉及到的业务要求快,有一些业务要求稳,这两个就是矛盾。这也是金融互联网公司内部面临的主要问题,互联网要求简单,快速,创新,金融则是复杂,稳定,保守。如果解决这些矛盾,也是这类公司面临的问题。 
     
    --ps,这里发一个消息:有兴趣来成都支付宝(java)的同学,站内联系我
    展开全文
  •  潜伏阶段是冲突的萌芽期,这时候冲突还属于次要矛盾,对冲突的存在还没有觉醒。在这个阶段,冲突产生的温床已经存在,随着环境的变化,潜伏的冲突可能会消失,也可以被激化。  2、被认识阶段  在这个阶段,已经...
  • 社会矛盾调处经验交流材料 调处中心成为群众化解矛盾纠纷的“娘家人” 各位领导: xx乡是xx市的一个回汉共居的农业大乡,辖区面积x平方公里,辖x个行政村,x个自然村,现有人口x人。前些年一直是一个矛盾多、问题多...
  • 矛盾论读书笔记

    千次阅读 2018-09-26 05:49:56
    矛盾是有差异的地方,是不和谐的地方,是让人感觉突兀的地方,这些解释都是在文字上给予的解释,实际情况中要通过调查、思考的方式去确定什么是矛盾。   矛盾具有普遍性,第一种含义是矛盾存在与一切事物的发展...
  • BugkuWEB矛盾

    2019-03-19 14:05:00
    题目的意思是GET方式,num不能为数字,但是他的值为1,is_numeric(data)函数是判断data是不是数字返回bool类型 GET方式和POST方式区别  HTTP 定义了与服务器交互的不同方法,最基本的方法是 GET 和 POST。  ...
  • 解决Android系统中虚拟SD卡和真实SD卡二者的矛盾! 因为手机存储理念的进化,现在Android4.1和4.2对虚拟SD卡和真实SD卡的表述有点复杂,如下: 虚拟SD卡,即系统设置中称为手机存储,习惯上称为内置SD卡,...
  • 在一家初创公司里面,矛盾是在所难免的,工作时间太长,空间和资源普遍国金,人们往往固执己见,所有的这一切都可能无法避免,但是如果准备充分,则完全可以优雅地处理好。 为了搞清楚如何处理企业矛盾,笔者询问了...
  • 冲突的三种解决方式

    千次阅读 2019-03-03 18:33:26
    在这种方式下不需要使用svn resolved(解决)  2、放弃自己的更新,使用别人的更新。使用最新获取的版本覆盖目标文件,执行resolved filename并提交 (选择文件—右键—解决,使用svn --resolved)。  3、手动解决:...
  • 1、信息化整体基础不好,导致IT部门地位的边缘... 5、信息化快速成效和企业自身管理成熟度的矛盾 6、灵活性信息化架构与规范管理的矛盾 7、决策者的想法、管理层的想法、操作层的想法都不一致的矛盾 。。。
  • 《小目标目标检测的解决方法及方式

    千次阅读 多人点赞 2020-11-27 10:07:49
    《小目标目标检测的解决方法及方式》 最近在做小目标相关的项目,参考了一些博客、论文及书籍,在这里对小目标的方法和方式做了些总结。如果有哪些问题理解错误或补充欢迎讨论。 1.什么是小目标检测 在物体检测的...
  • 我的矛盾心灵

    千次阅读 2006-10-10 10:14:00
    在我的生活中充满着无限的期望和撞憬,然而给我带来的是却是无穷无尽的坎坷和失望,从小没有爱,父亲的教子方法是:“油盐吃好菜,棒棒出好人”,吃尽了不少苦头,一路走来,也不知道这种传统的教育方式给我带来的是...
  • 在上下级之间,往往总会因为权力、地位的差距,而导致误解,发生上下级之间关系不协调的矛盾。这种矛盾或者表现为上司对下属某个方面的不满,或者下属对上司产生一定形式的怨言或怨恨。而导致这种矛盾的原因,可能与...
  • 思维方式的变革主要是历史演化过程的一种表现,是解决理论矛盾的一种方式。怀特海批判并超越传统形而上学,提出用"过程"思维方式来阐释人与世界的关系,揭示了实事即过程,存在即过程。他用"永恒客体"把世界万物相互关联...
  • 跨团队的持续集成: 几个基本矛盾

    千次阅读 2009-07-05 22:33:00
    单个团队内部的持续集成已经是成熟的...这里想讨论一下几个基本的矛盾, 和理想中的解决方案 1. 并行开发 与 集成 之间的矛盾这是本质问题, 如果所有功能都是由单一开发者循序渐进的完成, 则集成并不是大问题. 由于团
  • 免费和版权,矛盾中的人人影视 window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[...
  • 原因只有一个,各自为阵,不知道打配合,下的都是表面功夫,我最看不惯一个企业内部各自为政的工作方式。执行力是一个企业内部高效的基础,它基于有一个明确的需求认知。今天就谈谈工作中沟通和执行力的重要性。 1....
  • 在不影响商业价值或用户的体验的前提下,需求方大都会认同,从而解决矛盾。第二种情况是需求合理清晰,但是从技术实现成本过高或周期过长。这需要站在技术的角度重新考虑各种替代方案。如果替代方案既能满足需求又...
  • 直面电子政务三大矛盾

    千次阅读 2004-09-14 16:22:00
    如何把握安全与开放的平衡,解决这一矛盾,我认为一方面要把握住哪些信息是政府机密哪些是开放;另一方面,在电子政务平台的建设过程中要摆脱 “安全绝对化”倾向。  综上所述,概要分析了电子政务发中展过程中...
  • 在我们的设计生涯中,难免碰到各种各样的问题,而与各户之间的关于设计方面的矛盾对立,更是我们遇到的最主要的问题。   因为我们是乙方,所以大多数设计师不得不无奈的屈服于甲方种种与自己的设计不符的要求之下...
  • 问题往往到了最矛盾的时候,也是到了解决的时候,现在我把解决代码贴出来,大家一看就明白了。多的不说,看代码: Js代码 1.renderer:function(value){  2. if(value instanceof Date){  3. return new Date...
  • 在以前的文章中,我曾经提到过软件开发中充满了矛盾,一些原则本身就是彼此矛盾的,需要不断在这些矛盾中寻求折中、平衡。这里给出一个源自实际的简单例子,希望能给大家一点启示,只是不知道是否贴切(说明:程序用...
  • 来源:CSDN ...他们也经常在开发过程中遇到技术和需求之间产生的矛盾,那么这些矛盾该如何调解、当需求出现描述模糊的时候又该怎样处理呢?为此,记者采访了阿里软件研发中心总监叶伟。叶伟
  • 几年感觉下来,这是一个古老的行业,协作方式也依然是原始的。 在实际工作中不良的协作带来了非常多的问题。而我们找寻了市面上现有的协作软件,没能找到能直接解决我们需求的方案。所以我们打算尝试通过互联网的...
  • 对下一代网络( NGN)中软交换组网方式...该方案充分考虑 了软交换网络的扁平化特征,同时又具有灵活的组网特性,解决了层次结构中路由选择复杂和平面结构中数据 维护复杂的矛盾,对实际的软交换网络的组网具有参考价值。
  • 网络上承载专用的业务,其安全性一定要得到保障,然而网络的建设就是为了互通的,没有数据的共享,网络的作用也缩水了不少,因此网络隔离与数据共享交换本身就是天生的一对矛盾,如何解决好网络的安全,又方便地实现...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 91,245
精华内容 36,498
关键字:

如何解决矛盾的方式