我可以使用以下代码使用xml配置从一个java类中的两个bean创建:
<context:component-scan base-package="some.package"/>
<bean id="dependentBean" class="some.package.DependentBean">
<property name="firstBean" ref="firstBean"/>
</bean>
<bean id="firstBean" class="some.package.Handler">
<constructor-arg index="0" ref="service"></constructor-arg>
<property name="defaultUrl" value="url/first"></property>
</bean>
<bean id="secondBean" class="some.package.Handler">
<constructor-arg index="0" ref="service"></constructor-arg>
<property name="defaultUrl" value="url/second"></property>
</bean>
Run Code Online (Sandbox Code Playgroud)
我的目标是将firstBean和secondBean移动到基于java的配置,如下所示:
package some.package;
@Configuration
public class Configuration {
@Bean(name="firstBean")
public Handler firstHandler(Service service){
Handler handler= new Handler(service);
handler.setDefaultTargetUrl("url/first");
return handler;
}
@Bean(name="secondBean")
public Handler secondHandler(Service service){
Handler handler = new Handler(service);
handler.setDefaultTargetUrl("url/second");
return handler;
}
}
Run Code Online (Sandbox Code Playgroud)
但是当上下文开始加载时,spring会抛出以下异常:
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'firstBean' is defined
Run Code Online (Sandbox Code Playgroud)
然而,它适用于这种情况:
package some.package;
@Component …Run Code Online (Sandbox Code Playgroud) 这些实现之间有什么区别,哪些情况应该使用一个或另一个队列?
我有以下地图:
Map<String, MyCustomObject>
Run Code Online (Sandbox Code Playgroud)
我的目标是使用hamcrest匹配器验证此映射的容量.我尝试过以下方法:
assertThat(map, hasEntry("key", (MyCustomObject)hasItem(hasProperty("propertyName", equalTo("value")))));
Run Code Online (Sandbox Code Playgroud)
但看起来该hasItem方法仅适用于集合.
有没有其他方法可以验证自定义对象?
new MyCustomObject()在我的情况下不起作用,因为测试因hashcode相等而失败.而另一件事是我无法修改MyCustomObject class.
我正在springockito-annotations 1.0.9用于集成测试.
我有以下控制器:
@Autowired
public Controller(
@Qualifier("passwordService ") PasswordService passwordService ,
@Qualifier("validator") Validator validator,
@Qualifier("reportService") ReportService reportService,
DateCalculator dateCalculator,
Accessor accessor){
this.passwordService = passwordService;
this.validator = validator;
this.reportService = reportService;
this.dateCalculator = dateCalculator;
this.accessor = accessor;
}
Run Code Online (Sandbox Code Playgroud)
在测试中,我将使用@ReplaceWithMock注释从上下文中替换bean .
但不幸的是,它仅适用于没有@Qualifier注释的依赖项.
也就是说,我的测试看起来像这样:
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration(loader = SpringockitoAnnotatedContextLoader.class, classes = {TestContext.class})
public class ControllerTest {
@Autowired
@ReplaceWithMock
private PasswordService passwordService ;
@Autowired
@ReplaceWithMock
private Validator validator;
@Autowired
@ReplaceWithMock
private ReportService reportService;
@Autowired
@ReplaceWithMock
private DateCalculator dateCalculator; …Run Code Online (Sandbox Code Playgroud) java integration-testing unit-testing spring-mvc springockito
我有应用程序,客户可以存储以下html行,以便为实际浏览器加载不同的样式:
<!--[if IE 6]><link rel="stylesheet" type="text/css" media="all" href="default/css/general_ie6.css"><![endif]-->
<!--[if IE 7]><link rel="stylesheet" type="text/css" media="all" href="default/css/general_ie7.css"><![endif]-->
<!--[if IE 8]><link rel="stylesheet" type="text/css" media="all" href="default/css/general_ie8.css"><![endif]-->
Run Code Online (Sandbox Code Playgroud)
此外,我已配置OWASP policy为以下列方式禁止恶意html标记:
new HtmlPolicyBuilder().allowElements("link").allowAttributes("rel", "type", "media", "href").onElements("link").toFactory();
Run Code Online (Sandbox Code Playgroud)
但在卫生设施if browser lines被取消后.
您能否建议如何配置策略以便存储此类内容?
我将在我的Web应用程序中避免使用CSRF atack.
我在我的apache上设置了csrf配置,如下所示:
<VirtualHost>
...
CSRF_Enable on
CSRF_Action deny
CSRF_EnableReferer off
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
另外,我安装了以下apache模块:
mod_csrf-0.3
mod_parp-0.12
mod_setenvifplus-0.23
Run Code Online (Sandbox Code Playgroud)
在某些情况下有可能忽略CRSF.
所有东西都运行正常,即csrfpid添加到所有POST方法,不添加到GET.
但是发现了一个问题.当我尝试使用参数发送GET方法时: www.example.com/test.jsp?csffpid = some_csrf_id&some_attribute = 0, csrfpid标记已附加到链接.
我试过玩:
SetEnvIfPlus Request_Method "GET" CSRF_IGNORE=yes.
Run Code Online (Sandbox Code Playgroud)
但是,它在我的情况下不起作用.
另外,我发现,问题是通过mod_csrf.c文件引起的.
获得关于所描述的案例的一些想法或有用的链接将是很好的.
我的应用程序具有apache模块提供的CSRF保护.我的应用程序包含几个页面,允许上传一些文件,如下所示:
<form:form method="post" action="my.controller" enctype="multipart/form-data" id="form">
Run Code Online (Sandbox Code Playgroud)
所有的东西通过我们从更新了Apache的版本时工作得很好 httpd-2.2.3到httpd-2.2.15.
我已经google了一段时间,发现问题可能与我的表单中的multipart/form-data参数有关.在这种情况下,表单发送为不安全.另外我发现spring可以通过MultipartFilterspring doc http://docs.spring.io/spring-security/site/docs/3.2.0.CI-SNAPSHOT/reference/html/csrf.html#来处理上面的内容.CSRF,multipartfilter
我是CSRF新手.很高兴知道可以使用带有apache配置的spring CSRF保护来处理这种情况.
此外,我找到了解决方法,我可以为所需的URL禁用CSRF,例如
RewriteRule /url/mycontroller.controller - [E = CSRF_IGNORE:yes]
但我不确定哪一个是正确的.
我有大约50个使用@ResponseBody注释的控制器.
像这样:
@RequestMapping(value = "/someUrl.controller", method = RequestMethod.GET)
public @ResponseBody Object getObject(@RequestParam("id") Long id) {
Object object = provider.getObject(id);
return object;
}
Run Code Online (Sandbox Code Playgroud)
有时候getObject方法返回null.问题是在客户端我得到空响应而不是null.
在初始实现中,我们有自定义JsonView对象,它作为包装器而没有@ResponseBody注释.
像这样:
@RequestMapping(value = "/someUrl.controller", method = RequestMethod.GET)
public JsonView<Object> getObject(@RequestParam("id") Long id) {
Object object = provider.getObject(id);
return new JsonView(object);
}
Run Code Online (Sandbox Code Playgroud)
所以它工作正常.
我找到了一些解决方案如何覆盖Jackson 2.0中的null序列化器?但不幸的是,它仅适用于POJO中的字段.
您有什么想法可以处理吗?
提前致谢!
我已经开始在我的项目中使用spring ActiveDirectoryLdapAuthenticationProvider和另一个用于DB验证用户身份的项目.
我关注的主要问题涉及可能在具有相同凭据的活动目录服务器和数据库端创建的相同用户.之后,这些用户将有可能使用他们的电子邮件登录项目.在此步骤中,我堆叠的情况不一致,因为拥有DB和AD凭据的用户对项目页面具有不同的访问权限.
为了解决这个问题,我们决定删除可能登录AD用户的电子邮件,因为对于数据库提供商,我们无法修改现有功能,用户应该以之前的方式登录.
我已经调查了Spring的ActiveDirectoryLdapAuthenticationProvider方面,然后发现该类是,final并且不幸的是我没有可能覆盖我的方法所需createBindPrincipal.
我们决定要做的下一步是将现有类复制粘贴到我们的项目中,然后删除final修饰符,然后我们执行与此帖子中类似的操作如何通过LDAP over TLS对Active Directory进行身份验证?.
总的来说,我不想让它保持原样,因为将来我们决定转移到最高版本的春天时将是困难的支持.除此之外,我们应该复制过去ActiveDirectoryLdapAuthenticationProviderTest以保持适当形式的覆盖范围.
有人可以解释一下这门课的主要原因是什么final?
我们的遗留应用程序最初设计为允许为可自定义的页面存储任何html标记.这些页面的想法是存储客户需要的任何HTML,然后在某些时候有可能呈现这个HTML数据.
这种方法允许用户存储任何XSS.我们当前的目标是定义和实施不允许存储任何XSS的策略.
基于一些预定义的规则,我们已经研究了几种能够清理html的方法:
但这两种方法都是基于卫生而非验证.所以基本情况可能如下所示:
这种方法适用于新数据.对于遗留数据,我们会遇到几个问题:
所以出现以下问题:
java ×10
spring ×4
apache ×2
csrf ×2
xss ×2
ajax ×1
concurrency ×1
hamcrest ×1
html ×1
jackson ×1
junit ×1
owasp ×1
queue ×1
spring-ldap ×1
spring-mvc ×1
springockito ×1
unit-testing ×1