我想在一个普通的Spring MVC应用程序中使用GSP视图而不是JSP/JSTL视图.我已经将groovy.servlet.TemplateServlet添加到web.xml,如下所示:
<servlet>
<servlet-name>GroovyTemplate</servlet-name>
<servlet-class>groovy.servlet.TemplateServlet</servlet-class>
<init-param>
<param-name>template.engine</param-name>
<param-value>groovy.text.GStringTemplateEngine</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>GroovyTemplate</servlet-name>
<url-pattern>*.gsp</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)
并设置一个Spring InternalResourceViewResolver来加载GPS文件.到目前为止一切正常,但是为了将模型中的值暴露给模板,我必须做一些技巧(继承TemplateServlet并将它们添加到ServletBinding中).
现在我的下一个障碍是默认情况下JSTL在使用c:out标记时转义XML,Grails有编解码器的概念来自动转义GSP中使用的值.默认情况下,上述模板方法不会逃脱,这需要开发人员非常小心地避免XSS漏洞.
是否有另一种(更好的)使用GSP的方法,包括在不使用Grails的普通Spring MVC应用程序中自动转义?
我试图在Spring论坛和搜索StackOverflow上找到这个问题的答案.我发现很多页面描述了可怕的架构并且要求和我做同样的事情,但是我的预期用法不同所以请耐心等待:-)
我有一个Spring 2.5项目,使用基于注释的表单控制器,基本上是这样的:
@RequestMapping("/edit/someObject")
public String handleSubmit(HttpServletRequest request, HttpServletResponse response, SomeObject someObject, BindingResult result) {
// Some check here
if(result.hasErrors()) {
return "form";
} else {
SomeObjectService.update(someObject);
return "redirect:/view/someObject";
}
}
Run Code Online (Sandbox Code Playgroud)
在此我检查HttpServletRequest中的一些http属性,如果此属性具有特定值,则使用HttpServletResponse发送重定向.完成此检查的是此应用程序中的很多(但不是全部)表单控制器.我想要做的是创建一个由一些AOP建议处理的@CheckedSubmit注释来执行此检查,然后从控制器中删除HttpServletRequest和HttpServletResponse参数.
我的问题是我不知道如何从这个AOP建议中访问当前的HttpServletRequest和HttpServletResponse而不将这两个作为(未使用的)参数用于带注释的方法,这是我首先想要避免的.
简介:如何在@RequestMapping带注释的方法上从AOP建议访问HttpServletRequest/Response?
我已经对HttpOnly cookie和存在的问题进行了一些研究,可以将XHR请求与TRACE方法结合使用,以获得从服务器回送的cookie值.
对于安全的Web应用程序,我目前有以下设置:
为了避免跨站点请求伪造,我在表单的隐藏字段中添加了一个随机键.必须在每个POST请求中返回此密钥才能接受请求.
除此之外,所有HTML都默认使用白名单进行转义,以选择允许的标签和属性,但要说明为什么这还不够:我们之前允许使用span上的style-attribute(例如为文本着色),可以用以下方式在Internet Explorer中传递javascript:
<span style="width: expression(alert('Example'));"> </span>
Run Code Online (Sandbox Code Playgroud)
然后是最后一个问题:有人能指出这个设置中可能存在缺陷的任何缺陷或建议吗?或者您使用相同或完全不同的方法?
已知问题:
java ×2
spring ×2
annotations ×1
aop ×1
cookies ×1
groovy ×1
gsp ×1
httponly ×1
security ×1
spring-mvc ×1