我正在尝试绘制Play框架如何支持转义.
这是一个很好的页面,列出了所需的功能:https: //www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sheet
因此,我试图将其与Play模板功能联系起来,并充分了解Play的功能和不执行功能.
${}或escape()函数escapeJavaScript() http://www.playframework.org/documentation/1.2/javaextensions另一个困惑点是支持index.json(即使用模板来构建JSON而不是HTML).是否${}神奇地切换到JSON文档中的JavaScript转义,或者它是否仍然转义HTML,因此JSON模板中的所有内容都必须具有显式escapeJavaScript()?
http://www.playframework.org/documentation/1.2/javaextensions上还有一个addSlashes(),但对于我能想到的任何情况,它似乎都不太合适.(?)
如果有一个关于如何在Play中进行所有转义的全面指导,那将是很棒的.在我看来,在几种情况下答案是"滚动你自己",但也许我错过了所包含的内容.
许多流行的字体似乎只能通过http://webfonts.fonts.com/上网使用
但是,它以一种非常奇怪的方式工作.它们不会为您提供直接的字体URL,而是为您提供引用字体文件的CSS文件.我认为CSS中的字体URL可能是短暂的,随着时间的推移会发生变化,以防止未经授权的使用.所以你必须使用他们的CSS,你不能直接合并字体文件的URL(据我所知).
反过来,CSS不是我认为它应该是的.而不是(简化):
@font-face {
font-family: "Foo";
font-weight: bold;
src: url("foo-bold-variant.ttf");
}
@font-face {
font-family: "Foo";
font-weight: normal;
src: url("foo-normal-variant.ttf");
}
Run Code Online (Sandbox Code Playgroud)
它是:
@font-face {
font-family: "Foo Bold";
src: url("foo-bold-variant.ttf");
}
@font-face {
font-family: "Foo Normal";
src: url("foo-normal-variant.ttf");
}
Run Code Online (Sandbox Code Playgroud)
因此,您不能这样做:
body {
font-family: "Foo", sans-serif;
}
Run Code Online (Sandbox Code Playgroud)
相反,在您使用的任何地方font-weight: bold,您都必须将其更改为font-family: "Foo Bold",而且我猜您必须添加CSS规则来更改家庭等<strong>.我用粗体作为例子,但font-style除此之外还出现了同样的问题font-weight.
他们将此解释为iOS错误的解决方法("这是一个功能!"):http://blog.fonts.com/2010/09/23/getting-web-fonts-to-look-fantastic-on-iphone -and-ipad的器件/
但是该错误已在iOS 4.2中得到修复:http: //blog.typekit.com/2010/12/06/updates-to-typekits-mobile-support/
有了这个设置,除非我失去了一些东西,我不能使用任何第三方的CSS或脚本尝试使用font-weight,因为fonts.com的做法打破了font-weight和font-styleCSS属性完全.您必须为"mybold"或类似的东西组成一个自定义CSS类,而不是使用font-weight,以将font-family设置为"Foo Bold".即他们打破标准CSS.(我错过了什么?)
也许他们会在某个时候解决这个问题.但与此同时, …
在使用Typesafe Config的Scala应用程序中,我想添加在运行时重新加载Config的可能性.Config实例是不可变的.这是我到目前为止:
package config
trait Settings {
private[config] var config: Config = ConfigFactory.empty()
def engine: EngineSettings
}
trait EngineSettings {
def weight: Int
def offset: Int
}
class AppSettings {
override def engine = new EngineSettings {
override def weight = config.getInt("engine.weight")
override def offset = config.getInt("engine.offset")
}
}
object Settings {
private val namedSettings = new TrieMap[String, AppSettings]
def load(configName: String = "local"): Settings = {
// load config
// create or update AppSettings
// add to map and …Run Code Online (Sandbox Code Playgroud) 我有一组对象,假设它们是"帖子",并且可以修改这些对象.我想在客户端显示一个动态更新的列表.所以在客户端,如果通过轮询执行此操作,客户端将调用以下API:
getPostsChangedSince(serial)
Run Code Online (Sandbox Code Playgroud)
哪里serial可能是一个单调递增的数字,可能是一个时间戳.客户端返回自那时以来已更改的帖子列表,存储新的最新序列,以及下次客户端轮询它自最新序列以来的请求更改.
我认为这个问题(关于ASP.NET)的基本思想是一样的:如何使用ADO.NET数据服务实现"获取最近更改的项目"?
我正在尝试找到在MongoDB中实现它的最佳方法.
我喜欢将时间用于串口的想法,因为即使有多个应用服务器,它至少可以自动正常工作.序列将存储在每个post对象中,并在对象被修改时更新.
基于时间戳的序列可以实现为:
解决方案中的一些不错的功能包括:
我意识到这里的一些角落案件有点"学术性",很可能在现实生活中被捏造.
到目前为止我的方法是:
问题:
我正在使用Typesafe Activator的最新版本(1.2.8与Scala 2.11.x).
当我"org.apache.httpcomponents" %% "httpclient" % "4.4-alpha1"向我的项目中添加依赖项时build.sbt,如下所示:
libraryDependencies ++= Seq(
"com.typesafe.akka" %% "akka-actor" % "2.3.4",
"com.typesafe.akka" %% "akka-testkit" % "2.3.4",
"org.scalatest" %% "scalatest" % "2.1.6" % "test",
"junit" % "junit" % "4.11" % "test",
"com.novocode" % "junit-interface" % "0.10" % "test",
"org.apache.httpcomponents" %% "httpclient" % "4.4-alpha1" // my added dependency
)
Run Code Online (Sandbox Code Playgroud)
...并尝试更新项目(在激活器的cli中)我收到一个错误:
[error] (*:update) sbt.ResolveException: unresolved dependency: org.apache.httpcomponents#httpclient_2.11;4.4-alpha1: not found
Run Code Online (Sandbox Code Playgroud)
我知道scala的版本不是二进制兼容的,但我试图获得一个纯java库org.apache.httpcomponent#httpclient!为什么激活器在artifactId的末尾添加"_2.11"并制作错误的URL ...?怎么解决?
我输入的内容似乎有些难看:
val maxTime = times.max(DateTimeComparator.getInstance().asInstanceOf[Comparator[DateTime]] asScala)
Run Code Online (Sandbox Code Playgroud)
times 是org.joda.time.DateTime的序列.
必须有更好的方法来获取DateTime的Ordering对象.在那儿?
特别是失去asInstanceOf会很棒......