小编30t*_*thh的帖子

Spring MVC(或Spring Boot).针对安全相关异常的自定义JSON响应,如401 Unauthorized或403 Forbidden)

我正在开发一个REST服务.它使用JSON,并且在出现问题时必须返回一些预定义的JSON对象.默认的Spring响应如下所示:

{
  "timestamp": 1512578593776,
  "status": 403,
  "error": "Forbidden",
  "message": "Access Denied",
  "path": "/swagger-ui.html"
}
Run Code Online (Sandbox Code Playgroud)

我想用自己的JSON替换这个默认的JSON(带有栈跟踪和其他异常相关信息).

Spring提供了一种覆盖默认行为的便捷方法.应该定义一个@RestControllerAdvice带有自定义异常处理程序的bean.像这样

@RestControllerAdvice
public class GlobalExceptionHandler {
  @ExceptionHandler(value = {Exception.class})
  public ResponseEntity<ExceptionResponse> unknownException(Exception ex) {
    ExceptionResponse resp = new ExceptionResponse(ex, level); // my custom response object
    return new ResponseEntity<ExceptionResponse>(resp, resp.getStatus());
  }
  @ExceptionHandler(value = {AuthenticationException.class})
  public ResponseEntity<ExceptionResponse> authenticationException(AuthenticationExceptionex) {
      // WON'T WORK
  }
}
Run Code Online (Sandbox Code Playgroud)

ExceptionResponse然后,Spring将使用特殊的消息转换器将自定义对象转换为JSON.

问题是,安全例外InsufficientAuthenticationException不能被注释为的方法拦截@ExceptionHandler.这种异常发生在输入Spring MVC调度程序servlet并初始化所有MVC处理程序之前.

可以使用自定义筛选器拦截此异常,并从头开始构建自己的JSON序列化.在这种情况下,可以获得一个完全独立于Spring MVC基础结构的其余部分的代码.这不好.

我找到的解决方案似乎有效,但看起来很疯狂.

@Configuration
public class CustomSecurityConfiguration extends 
WebSecurityConfigurerAdapter {

@Autowired
protected …
Run Code Online (Sandbox Code Playgroud)

spring json spring-mvc spring-security spring-boot

9
推荐指数
2
解决办法
3879
查看次数

PHP`DateTime :: days`返回垃圾箱?

PHP Class DateInterval有一个属性"days".根据手册,它返回"间隔跨越的总天数.如果这是未知的,则天数将为假."

在我的情况下代码:

$d = new DateInterval('P1Y'); 
echo $d->days;
Run Code Online (Sandbox Code Playgroud)

回报 -99999

和这样的代码

$a = DateTime::createFromFormat("d.m.Y", "01.01.2010");
$b = DateTime::createFromFormat("d.m.Y", "03.01.2010");

$d = $b->diff($a);
echo $d->days;
Run Code Online (Sandbox Code Playgroud)

回报 6015

我误解了什么吗?

php datetime php-5.3

7
推荐指数
1
解决办法
631
查看次数

AWS Java TransferManager问题,JVM无法获取更多本机线程

TransferManager几个星期以来我一直在争论一个问题,我希望得到一些反馈,

我有一个服务器应用程序,等待发送给它的任务.其中一些任务需要上传到S3.该任务包含我需要的所有上传信息,包括访问密钥.

在我的实际上传的代码,我需要创建一个新的S3ClientTransferManager对象每次我需要做的上传,因为我不知道提前我的访问密钥的时间.

在系统处理大约1200个上载后,我收到一个错误,指示JVM无法获得更多本机线程.我将一个分析器附加到应用程序,并注意到该TransferManager对象没有得到正确清理,有成千上万的"s3-transfer-manager-worker-1"线程处于空闲状态.

我试图TransferManager.shutdownNow()在上传完成后添加一个电话.这确实清理了线程.但是,RejectedExecutionException无论何时TransferManager创建新内容并尝试上传,我都会收到.

TransferManager包含一个UploadMonitorUploadMonitor具有静态ScheduledExecutorService. TransferManager.shutdownNow()调用UploadMonitor.shutdownNow()调用shutdownNow()执行程序服务的静态方法.这使得我不能再使用任何TransferManager对象,即使我尝试创建一个新对象.

如何在不耗尽线程的情况下使用多个传输对象?这似乎是一个错误.

java amazon-s3 amazon-web-services

6
推荐指数
1
解决办法
2951
查看次数

类 java.nio.file.Files 将 FileAlreadyExistsException 作为“可选的特定异常”抛出。这是什么意思?

有谁知道,“可选的特定异常”究竟是什么意思?

https://docs.oracle.com/javase/8/docs/api/java/nio/file/Files.html

有些 JVM 会抛出它,有些则不会?如果他们不这样做,向他们抛出一个通用的 IOException 或根本没有异常?它有关于不同实现的统计数据,它到底有多“可选”?

java jvm nio

5
推荐指数
1
解决办法
240
查看次数

Java EE持久性.嵌套的@PostLoad.supercalss中的PostLoad回调方法

如果实体类及其超类都实现了带注释的方法,会发生javax.persistence.PostLoad什么?必须调用哪种方法,哪种方法最先?它是否依赖于方法的可见性(私有,公共)?

(Hibernate默认会话根本不调用这些方法,我将使用Hibernate实现一个变通方法PostLoadEventListener.)

java hibernate jpa java-ee superclass

4
推荐指数
1
解决办法
1328
查看次数

Java集合.创建排序视图而不创建副本

是否有可能在不创建副本的情况下迭代对动态内容进行排序的集合?

更新:要排序的集合是只读列表.

java memory collections comparator

3
推荐指数
1
解决办法
470
查看次数

加特林.检查HTML结果是否包含某些字符串

编程Gatling性能测试我需要检查,如果从服务器返回的HTML包含预定义的字符串.它确实如此,错误地打破了测试.

我没有发现如何做到这一点.必须是这样的:

  val scn = scenario("CheckAccess")
    .exec(http("request_0")
      .get("/")
      .headers(headers_0)
      .check(css("h1").contains("Access denied")).breakOnFailure()
      )
Run Code Online (Sandbox Code Playgroud)

我打电话给希望的功能"包含"和"breakOnFailure".加特林有类似的东西吗?

scala gatling

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