小编Dav*_*vid的帖子

在春季测试@Scheduled

Spring提供了使用注释以特定间隔安排和执行任务的可能性,例如 @Scheduled

有没有方便的单元测试这种行为的方法?

当然我可以自己调用bean的方法,但是我想确保不会因为配置错误等问题遇到多次执行等问题.

其他框架提供了自己快速转发时间的可能性.一个例子是Activiti,你可以打电话

org.activiti.engine.impl.util.ClockUtil.setCurrentTime(date)
Run Code Online (Sandbox Code Playgroud)

快进框架使用的时间.

春天有类似的东西吗?

基本上我想要做的是在单元测试中使用这样的东西(运行使用SpringJUnit4ClassRunner)

@Test public void testTaskScheduling() {

  assertThat(someOtherBean.getSomeProperty(), is(equalTo(whatIinitiallyExpect)));

  SpringClockUtil.setDate(dateInTwoHours)// This is what I am missing
  SpringTaskExecutor.executeAllScheduledTasks() // Also missing

  assertThat(someOtherBean.getSomeProperty(), is(equalTo(whatIexpectNow)));
}
Run Code Online (Sandbox Code Playgroud)

java spring unit-testing scheduler

49
推荐指数
2
解决办法
3万
查看次数

处理Spring Security中的自定义异常

我们正在使用spring MVC + spring security + hibernate创建一个RESTful API.API可以生成JSON和HTML.为弹簧安全做一个好的错误处理让我很头疼:

身份验证可以通过各种方式进行:BasicAuth,通过POST请求中的不同参数以及Web登录.对于每个身份验证机制,<http>在spring security xml config 的namespace元素中声明了一个过滤器.

我们在自定义中处理所有弹簧异常HandlerExceptionResolver.这适用于我们的控制器中抛出的所有异常,但我不知道如何处理自定义spring安全过滤器中引发的自定义异常.由于Spring安全过滤器在我们调用任何控制器之前到来,因此我们没有看到我们在自定义spring安全过滤器中抛出的异常.

我在stackoverflow上找到了这个问题: 在Spring Security中使用自定义异常.但是我不明白他们在哪里处理那里抛出的异常.我们尝试了这种方法但我们的定制HandlerExceptionResolver没有被调用.而是向用户呈现由tomcat呈现的丑陋堆栈跟踪.

我们为什么需要这个? 可以激活和停用用户.如果它们被停用并尝试执行某些操作,我们希望返回带有自定义错误消息的JSON.这应该与弹簧安全性抛出时显示的不同AccessDeniedException.在AccessDeniedException某种程度上它使我们的HandlerExceptionResolver,但我不能跟着究竟如何.

可能的解决方案 我们考虑过使用a ExceptionTranslationFilter,但是当我们抛出自定义异常(在doFilter()方法的catch语句中设置断点)时,不会调用它.在我的理解中,应该调用这个catch块,并且应该使用认证入口点.

另一种可能性:我们可以做类似于ExceptionTranslationFilterspring安全过滤器链中的操作,并执行类似于它的AccessDeniedHandler操作:

RequestDispatcher dispatcher = request.getRequestDispatcher(errorPage);
dispatcher.forward(request, response);
Run Code Online (Sandbox Code Playgroud)

我们可以在请求中添加一些参数(错误代码,原因等),并让它指向一个控制器,它将处理JSON或HTML中的渲染.

以下是我们配置的简短摘录:

春季安全:

<http create-session="stateless" use-expressions="true" >
    <!-- Try getting the authorization object from the request parameters. -->
    <security:custom-filter ref="filter1" after="SECURITY_CONTEXT_FILTER"/>
    <security:custom-filter ref="filter2" before="LOGOUT_FILTER"/>
    <!-- Intercept certain URLS differently -->

    <intercept-url pattern="/admin/**" access="hasRole('ROLE_ADMIN')" …
Run Code Online (Sandbox Code Playgroud)

java spring exception-handling exception spring-security

17
推荐指数
1
解决办法
2万
查看次数

Tomcat JDBC MySQL ClassNotFoundException

我想在我的tomcat 7服务器上使用springMVC和JPA(使用hibernate)(在我的Mac上本地运行).

我能够使用嵌入式H2数据库成功设置所有内容.

现在我切换到mysql并收到以下错误

java.lang.ClassNotFoundException: "com.mysql.jdbc.Driver"
    org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1711)
    org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1556)
Run Code Online (Sandbox Code Playgroud)

这表明tomcat无法找到java的mysql-connector.有很多关于如何将连接器添加到$ CATALINA_HOME/lib的教程.

在尝试对我的项目使用maven依赖项之后,我遵循了建议并将.jar文件复制到lib目录中:

$ ls $CATALINA_HOME/lib/mysql*.jar
/Users/david/Applications/tomcat/lib/mysql-connector-java-5.1.20-bin.jar
Run Code Online (Sandbox Code Playgroud)

我已经读取并执行了目录和文件的权限.

目前我无法弄清楚如何让tomcat知道jar.该文件夹包含在

$CATALINA_HOME/conf/catalina.properties
Run Code Online (Sandbox Code Playgroud)

我已多次重启服务器.

谢谢你的帮助.

mysql spring tomcat hibernate jdbc

2
推荐指数
1
解决办法
5515
查看次数