网页设计师给了我HTML,看起来像:
<div .... style="background: transparent url(xxx.png) 170px center no-repeat">
Run Code Online (Sandbox Code Playgroud)
不幸的是,图像的内容xxx.png是由软件生成的,所以我做了一个WebResource并使用以下策略生成资源的URL,然后我style=使用Wicket 将其嵌入到属性中AttributeModifier.
// App initialization code
String resourceName = ....;
getSharedResources().add(resourceName, myWebResource);
// Creating the widget
String url = getServletContext().getContextPath()
+ "/resources/org.apache.wicket.Application/" + resourceName ;
String style = "background: transparent url(" + url + ") 170px center no-repeat";
div.add(new AttributeModifier("style", new Model<String>(style)));
Run Code Online (Sandbox Code Playgroud)
当我使用Eclipse在本地测试时,这可以正常工作,但是:
/foo到Jetty上/context-root/foo.我理解Wicket只使用相对URL解决了上下文根和Apache代理的这个问题.这将是我怀疑的最优雅的解决方案.但是,如果我有例如一个,IndexedParamUrlCodingStrategy那么URL可以是任意长度,我不知道有多少..要包括回来/resources.
编辑:当前的解决方案是使用上面的代码示例中的绝对URL,并在Apache中(a)像以前一样重写/context-root/*为/*(b)然后将上下文根添加到所有请求(c)转发到Jetty.这样,大多数URL可以没有上下文根,但是某些URL(对我的资源)可以具有上下文根,并且没有问题.但我不喜欢这个解决方案!
最近我看了一些我在工作中致力于我们的版本控制系统的代码,我发现它已被替换了一堆(没关系),但旧版本仍在那里,注释掉了.
我猜这个家伙对于删除它感觉有点"不安全",因此将其留在那里注释掉了.但是,这并不是必需的,因为我们正在使用版本控制.(旧版本错了,所以它不会像以后那样需要.)
这些stackoverflow问题处理的问题是,是否留下这样的旧代码是一个好主意:
但是,我的问题是:这个问题是否有一个术语,或者在与同事谈论它时可以引用一个"反模式名称"?
如果我有一个类如
Class<? extends MyObject> aClass = ...;
Run Code Online (Sandbox Code Playgroud)
我可以这样做:
if (aClass == MySubObject.class) { ... }
Run Code Online (Sandbox Code Playgroud)
或者我必须这样做
if (aClass.equals(MySubObject.class)) { ... }
Run Code Online (Sandbox Code Playgroud)
此外,进一步知道答案,我很想知道一个参考,即这是什么定义.
==如果可能,我更喜欢使用,因为我发现它更具可读性和更快.(显然它不是那么可读,或者说更快,但是,如果有更简单的解决方案,为什么还要使用更复杂的解决方案.)
我们使用Altova Stylevision生成XSLT 2.0文件.我们使用Saxon 9 for Java来执行这些XSLT文件.这已经好几年了,唉,我们都没有真正了解XSLT.
现在我们有错误:
Error at /xsl:stylesheet/xsl:function[9]
XPDY0002: Axis step child::element(item, xs:anyType) cannot be used here:
the context item is undefined
Run Code Online (Sandbox Code Playgroud)
第9个功能是:
<xsl:function name="sps:GoogleChartDataSourceUnitCount" as="xs:string">
<xsl:sequence select="concat(string-join(item/string(if ( number($XML/report/calculation-data[@data-source-name = $DataSourceParent]/item/variable[@name='unit_count']/@value) < 0 ) then 0 else round-half-to-even(number(variable[@name='unit_count']/@value),2)),','),'&chxl=0:|',string-join(item/variable[@name='month']/@value,'|'),'|2:||Min&chds=0,',string(round-half-to-even( max(item/(number(variable[@name='unit_count']/@value)))+1 , 0 )),'&chxr=1,0,',string(round-half-to-even( max(item/(number(variable[@name='unit_count']/@value)))+1 , 0 )))"/>
</xsl:function>
Run Code Online (Sandbox Code Playgroud)
有谁知道发生了什么事?
我的项目中有以下文件:
@Configuration
@Order(Ordered.LOWEST_PRECEDENCE)
public class SwaggerConfig {
@Bean
public Docket apiSwagger2Documentation() { .... }
}
Run Code Online (Sandbox Code Playgroud)
在Application.java中有:
@SpringBootApplication
@ComponentScan(basePackages = { ... })
@EnableSwagger2
public class Application {
...
}
Run Code Online (Sandbox Code Playgroud)
Swagger JSON可用/v2/api-docs,工作正常.
我想做的是为该端点启用CORS头.
对于我自己的控制器,我已经添加@CrossOrigin到控制器类,那些API然后有CORS头,工作正常.但是对于Swagger JSON URL我自己没有编写控制器,所以我不能使用那个注释.
我已经添加了以下方法SwaggerConfig,如Spring Framework中CORS支持中的 "全局CORS配置"中所述.
@Bean
public WebMvcConfigurer corsConfigurer() {
System.out.println("*** corsConfigurer called");
return new WebMvcConfigurerAdapter() {
@Override public void addCorsMappings(CorsRegistry registry) {
System.out.println("*** addCorsMappings called");
registry.addMapping("/v2/api-docs");
}
};
}
Run Code Online (Sandbox Code Playgroud)
打印两个打印语句,因此调用该方法.但是当我用curl调用URL时:
curl -H "Origin: foo.com" \
-H "Access-Control-Request-Method: …Run Code Online (Sandbox Code Playgroud) 我使用以下代码在 Java 中解析 XML 文档:
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Element el = db.parse(file).getDocumentElement();
Run Code Online (Sandbox Code Playgroud)
但是,在解析使用名称空间的 XML 文档时,出现错误:
org.w3c.dom.DOMException: NAMESPACE_ERR: An attempt is made to create
or change an object in a way which is incorrect with regard to namespaces.
at org.apache.xerces.dom.ElementNSImpl.setName(Unknown Source)
Run Code Online (Sandbox Code Playgroud)
我通过添加以下行解决了这个错误:
dbf.setNamespaceAware(true);
Run Code Online (Sandbox Code Playgroud)
现在一切正常。
在我看来,将解析器设置为命名空间感知将是一件完全积极的事情。据我所知,它仍然可以很好地处理“vanilla”非命名空间文档,没有任何缺点。
但是,如果是这样的话,那么他们为什么要把它作为一个选项,为什么false默认情况下呢?
所以我的问题是:我在我的软件中使用的一个好的默认设置是什么?我应该始终将其设置为true(因为这些 API 的设计者通过将其作为选项提供而搞砸了)还是应该false在某些情况下将其保留,因为每个值都有一些优点?如果是这样,它的优点是false什么?
我尝试用以下方式注释字段
并且在所有情况下,为其分配null不会引起IntelliJ 2016.2的投诉。
public class GreetingController {
@NotNull Integer x = 3;
public void foo() { x = null; }
}
Run Code Online (Sandbox Code Playgroud)
根据IntelliJ,所有这些都可以正常编译。
IntelliJ的此页面特别指出:“ IntelliJ IDEA即时显示了问题,因此您可以在编辑器中直接查看检查结果。” 我什至将示例代码(public class TestNullable)复制到了我的编辑器中,它不会产生任何错误。
IntelliJ的另一个页面指出您可以更改其响应的注释。所以我选择了javax.annotation.Nonnull,并确保那是我在代码中使用的那个,仍然没有运气。
明确地说,我希望提供的是我所希望的,并且是我所理解的是,编辑器窗口/编译器使我警惕了这个问题(我不是在寻找运行时检查,NullPointerException在运行时已经可以正常工作。)
如果它不能实时运行,我尝试了“重建项目”。
我确定这一定可行,我做错了什么?
我已经上传了一个无法在此处使用的示例:ZIP下载。
虽然XSD Schema描述的XML文件通常可以包含任何unicode字符,但是有些字段只允许使用ASCII.(因为这些字符串将被传递到另一个只接受ASCII的系统.)
有没有办法在XSD中指定?
我想有一个包含所有可能的ASCII字符的正则表达式,但我觉得必须有更好的方法.
CDATA在XML中使用如下:
<my-tag><![CDATA[my-data]]></my-tag>
Run Code Online (Sandbox Code Playgroud)
这是一种非常不寻常的语法.当我第一次看到它时,我认为它是我尚未学习的一些通用XML构造的特定形式.但是,据我所知(XML CDATA规范),它不是.
我的问题:有没有理由为什么CDATA部分看起来像它,例如是一些SGML的特殊情况?或者有些语言设计师只是想到有一天"我会在CDATA之前用支架制作一个CDATA部分,之后是一个支架,一个感叹号,用尖括号包围."
我有一堆页面,只有在用户登录时才能访问.因此URL有意义,并且用户可以将它们加入书签,我已经在Wicket中创建了可收藏的URL.
现在问题出现了,如果用户来查看这些页面,但还没有登录.PageParameters调用我的页面上的构造器.
我的方法是:
if在此构造函数中放置一个语句以测试用户是否已登录.setReponsePage 成为我的登录页面setResponsePage其作为所需可加书签URL的类/参数这种方法是否正确?这似乎是一些额外/手动工作(尽管不是太多!),但Wicket提供了许多"开箱即用"的有用东西:所以我的问题是:这是必要的还是有一些Wicket设施我'我不知道我可以利用哪些?
也许我错了,但我确信UNIX和C标准库提供了一些工具来让操作系统在进程退出后删除文件.但我不记得它叫什么(或者我想象它).在我的特定情况下,我想从perl访问此功能.
Java有这个deleteOnExit功能但我知道删除是由JVM完成的,而不是操作系统,这意味着如果JVM不正常地退出(例如电源故障),那么文件永远不会被删除.
但我理解我正在寻找的设施(如果它存在),因为它是由操作系统提供的,操作系统会查找文件的删除,可能是在电源故障等情况下在OS启动时进行一些清理工作,当然在进程不洁的情况下进行清理.
我熟悉这个逻辑,如果你想用用户名和密码验证某人,你应该返回同样的错误,不管用户名是否找到,或者密码是否错误。这个想法是,如果您返回单独的“未找到用户”和“找到用户,但密码错误”错误,攻击者可以尝试所有用户名并找出哪些用户名有效,然后将他们的字典攻击集中在这些用户名上.
使用 REST 服务,我有一个只有某些用户可以访问的资源,我们称之为/foo/{id}。所以有各种各样的情况:
用户尝试访问/foo/4并且他们有权访问,他们显然会得到 200 响应和资源。
用户尝试访问/foo/3但它不存在。(如果它确实存在,我不知道他们是否可以访问它,因为它不存在。想想 Facebook 上不存在的照片,照片只有存在时才具有所有权信息。)
用户尝试访问/foo/4,它存在,但他们没有访问权限。
所以我的问题是,在情况 2 和 3 中返回什么返回码?据我所知,有以下选项:
情况 2 返回 404,情况 3 返回 403。但这意味着攻击者可以找出存在哪些对象,类似于第一个示例中的密码示例。
所有例子都返回404,毕竟从用户的角度来看,他们无权访问的资源“不存在”,如果他们列出所有他们有权访问的资源,该资源将不在列表中.
所有示例都返回 403。
你会怎么办?这里的标准是什么?