有一个Spring全局@ExceptionHandler(Exception.class)
方法可以记录异常:
@ExceptionHandler(Exception.class)
void handleException(Exception ex) {
logger.error("Simple error message", ex);
...
Run Code Online (Sandbox Code Playgroud)
Veracode扫描表明此日志记录已经Improper Output Neutralization for Logs
建议使用ESAPI记录器.有没有办法在不将记录器更改为ESAPI的情况下修复此漏洞?这是我遇到此问题的代码中唯一的地方,我试图找出如何以最小的更改来修复它.也许ESAPI有一些我没有注意到的方法?
PS当前记录器是slf4j上的Log4j
UPD: 最后我使用了ESAPI记录器.我以为它不会使用我的默认日志服务,但我错了,它只是使用我的slf4j logger接口和适当的配置.
private static final Logger logger = ESAPI.getLogger(MyClass.class);
...
logger.error(null, "Simple error message", ex);
Run Code Online (Sandbox Code Playgroud)
ESAPI具有log4j记录器和记录器工厂的扩展.可以配置在ESAPI.properties中使用的内容.例如:
ESAPI.Logger=org.owasp.esapi.reference.Log4JLogFactory
Run Code Online (Sandbox Code Playgroud) 我可以像这样在JSP中获取cookie:
Cookie[] cookies = request.getCookies();
if (cookies != null) {
for (Cookie cookie : cookies) {
//work with cookies
}
}
Run Code Online (Sandbox Code Playgroud)
但我想知道我是否可以使用jsp:useBean(或其他东西)来获取它?可能是这样的:
<jsp:useBean id="myCookie" class="javax.servlet.http.Cookie" scope="request" beanName="cookieName"/>
...
<div class="${myCookie.value == "true" ? "class1" : "class2"}"></div>
Run Code Online (Sandbox Code Playgroud)
谢谢你的答案!
我有一个内部带有私有DAO字段的Spring Boot应用程序和服务。专用DAO属性带有注释@Autowired
(没有设置者或构造函数设置,仅带有注释)。我试图为服务编写Spock测试,但是找不到如何将模拟DAO注入@Autowired
变量。
class TestService extends Specification {
DAO dao = Mock(DAO)
Service service = new Service()
def "test save"() {
when:
service.save('data')
then:
1 * dao.save('data')
}
}
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
UPD:我正在测试Java代码。