我正在使用Spring MVC和Spring Security 3.0.6.RELEASE.在JSP中获取用户名的最简单方法是什么?或者甚至只是用户是否登录?我可以想到几个方面:
使用这样的scriptlet来确定用户是否已登录:
<%=org.springframework.security.core.context.SecurityContextHolder.getContext()
.getAuthentication().getPrincipal().equals("anonymousUser")
? "false":"true"%>
Run Code Online (Sandbox Code Playgroud)
我不喜欢使用scriptlet,我想在一些<c:if>标签中使用它,这需要将其作为页面属性放回去.
我可以再次使用我的SecurityContextHolder @Controller并将其放在模型上.不过,我在每个页面都需要这个,所以我宁愿不必在每个控制器中添加这个逻辑.
我怀疑有一个更清洁的方法来做到这一点......
我正在使用MD5(无盐)散列用户密码的系统.我想使用SHA-512和盐更安全地存储密码.
虽然这很容易实现以后的密码,但我还想改进现有的MD5散列密码,最好不要强迫所有用户更改密码.我的想法是只使用SHA-512和适当的盐来散列现有的MD5哈希值.然后我可以在数据库中设置一些标志,指示哪些密码是从纯文本中散列出来的,哪些是从MD5散列中散列出来的.或者我可以在验证用户时尝试这两种方法.或者甚至只使用MD5和SHA-512/salt散列新密码,这样它们就可以像旧密码一样处理.
以编程方式,我认为这不会是一个问题,但我不知道加密/散列是否足以通过将SHA-512/salt哈希应用于任何方式来破解哈希的质量.已经MD5哈希的密码.我的第一直觉是,如果有的话,它会更强大,一个非常轻的按键伸展.
我的第二直觉是我真的不知道我在说什么,所以我最好得到建议.有什么想法吗?
我有一个Parent与实体有@OneToMany关系的Child实体.大多数时候,当我需要一个工作Parent的Child实体,我的单亲家庭,工作,所以延迟抓取(FetchMode.SELECT)是合适的.
但是,我遇到的情况是我要查询大量的Parents(有时数百甚至数千),我需要使用它们的Child实体.FetchMode.SELECT给我一个严重的N + 1问题,所以我需要在这种情况下做一些不同的事情.如果我是通过JDBC执行此操作,则是对Parent记录进行单一查询,然后Child使用IN语句(where child.parentid in (?,?,?....))对所有记录进行另一次查询.我需要实时的Hibernate实体,因为Hibernate Search将调用getChildren()作为其索引过程的一部分.
我考虑的选项是:
Criteria.setFetchMode(“children”, FetchMode.JOIN)(或join fetch在HQL中) - 这会给我一个笛卡尔积,但这对许多实体来说是残酷的.@BatchSize到Parent.getChildren()-这将有助于我的大批量的场景,但它是不是真的我想用正常操作的策略.如果我可以在Criteria/HQL中为fetch设置批量大小,那将是完美的,但我找不到这样做的方法.FetchMode.SUBSELECT中Parent.getChildren()-很像@BatchSize,这将是非常适合我的大批量的情况,但不适合于正常操作,我不能找到一种方法,与标准使用/ HQL(标准与实体标注使用不同FetchMode枚举,尽管名称重复).tldr; 我与懒惰的获取模式有一对多的关系,但有时我希望能够一次有效地加载许多实体的关系.
我知道Dojo Deferreds的推荐用例是使用dojo.when(def)或def.then()并为Deferred的解析提供回调.但是,有时候我会遇到各种各样的情况,我真的需要等待延迟完成才能继续当前的线程.这是一个例子(http://jsfiddle.net/DG3Ax/2/上的完整示例)
function getSomething() {
var def = getSomeDeferred();
def.then(function(result) {
dojo.place("<li>def.then() = " + result + "</li>", "output");
});
return def.gimmeTheResultNow();
}
dojo.place("<li>getSomething() = " + getSomething() + "</li>", "output");
Run Code Online (Sandbox Code Playgroud)
显然Deferred.gimmeTheResultNow()不存在,但那是我正在寻找的功能.我没有控制调用getSomething()的代码,所以我不能让它处理一个Deferred; 它需要真正的结果.
我知道xhrGet()有一个同步参数,如果这是一个AJAX调用,我认为它会起作用,但情况不一定如此.有没有其他方法可以实现这一目标?
在 Kotlin 中,如果您希望加法表达式跨越多行,则需要将加号放在行尾,而不是行首。例如:
var a = 1
var b = 2
var c = 3
var d = a +
b +
c
println(d) // prints "6"
var e = a
+ b
+ c
println(e) // prints "1"
Run Code Online (Sandbox Code Playgroud)
据我所知,这是因为 Kotlin 将第二个示例解释为三个单独的语句,如下所示:
var e = a
+ b
+ c
Run Code Online (Sandbox Code Playgroud)
但我还没有找到任何文档来说明为什么+ somevariable它本身就是一个有效的陈述。它不会增加变量,并println(+somevariable)打印与 相同的值println(somevariable)。
如何为带有内置req,res对象的路由提供帮助功能。例如 如果我在json中发送了错误或成功消息,则有以下几行代码
console.log(err)
data.success = false
data.type = 'e'
data.txt = "enter a valid email"
res.json data
Run Code Online (Sandbox Code Playgroud)
我打算将其放在这样的辅助函数中
global.sendJsonErr = (msg)->
data.success = false
data.type = 'e'
data.txt = msg
res.json data
Run Code Online (Sandbox Code Playgroud)
但是我在辅助函数中没有res对象,除了传递它之外,我如何获得这些对象。由于将有更多重复的代码出现,所以我想走这条路。它是一种宏,而不是功能模块。谢谢
Video.js的主页声明如下(强调我的):
无论用户是使用最新版本的浏览器,还是像Internet Explorer 6这样的古老版本,他们都会获得类似的Video.js体验,该体验使用超轻量级Flash播放器来支持不支持HTML5视频的浏览器.
这告诉我,如果我有没有安装Flash插件的IE8实例,这个"超轻量级Flash播放器"应该显示视频.但是,情况似乎并非如此; 当我去http://videojs.com时,我只看到一个黑盒而不是视频.
我是否误解了Video.js嵌入式Flash播放器的用途?或者还有其他事情发生了吗?
更新:我添加了一个屏幕截图,我得到以下无用的JavaScript错误:
消息:m`I0_1363975786212
