小编ssc*_*ep3的帖子

在Spring Boot中处理嵌入式Tomcat异常

我们有一个问题,其中嵌入式Tomcat正在IllegalArgumentException从抛出LegacyCookieProcessor。它抛出500 HTTP响应代码。

我们需要处理异常并对其进行处理(特别是将其发送为400)。

典型的@ExceptionHandler(IllegalArgumentException.class)似乎没有被触发,Google似乎只给出了处理Spring Boot特定异常的结果。


例:

这是重现该行为的示例。您可以通过下载包含2.1.5.RELEASE版本中的spring-web(https://start.spring.io/)的初始项目来执行示例。然后将以下两个类添加到您的项目。

DemoControllerAdvice.java

package com.example.demo;

import java.util.HashMap;
import java.util.Map;

import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestControllerAdvice;

@RestControllerAdvice
public class DemoControllerAdvice {

    @ExceptionHandler(IllegalArgumentException.class)
    @ResponseStatus(HttpStatus.FORBIDDEN)
    public Map<String, String> forbiddenHandler() {
        Map<String, String> map = new HashMap<>();
        map.put("error", "An error occurred.");
        map.put("status", HttpStatus.FORBIDDEN.value() + " " + HttpStatus.FORBIDDEN.name());
        return map;
    }

}
Run Code Online (Sandbox Code Playgroud)

DemoRestController.java

package com.example.demo;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class DemoRestController {

    @GetMapping(value = "/working") …
Run Code Online (Sandbox Code Playgroud)

java spring tomcat spring-boot

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

JHipster:CORS在表单登录时失败(实际请求,不是在飞行前)

我想用第二个前端应用程序扩展我的jHipster单片设置,该应用程序从不同的URL访问相同的API.作为第一步,我已经启用了CORS application.yml并且我从前端发送带有withCredentials标志的请求.我正在使用会话而没有JWT身份验证.

许多方法现在按预期工作,但不是全部.飞行前(OPTIONS请求)始终通过并按预期工作.此调用的响应包含正确的CORS头.

但是,实际请求(例如,POST登录请求)还需要Access-Control-Allow-Origin响应中的header().此标头在我的自定义REST接口上自动设置,但它没有在jHipster生成的方法上设置,如/api/authentication/api/logout.它也不适用于受Spring受安全保护的资源/api/account(仅在未登录的情况下401,之后按预期使用正确的标头)

例如,对于注销,Google Chrome会在控制台中对以下消息作出反应,即使呼叫在"网络"选项卡中POST响应(响应状态200):

XMLHttpRequest无法加载http:// localhost:8080/api/logout.请求的资源上不存在"Access-Control-Allow-Origin"标头.原产地" 的http://本地主机:9000 "因此不允许访问.

我想知道,我在这里做错了什么.我想标题没有正确设置.我现在可以手动添加标题(例如在...中AjaxAuthenticationSuccessHandler),但这似乎不正确.

我正在使用相当过时的jHipster版本3.7.0.但是,我宁愿不更新核心项目.

你有什么想法,可能导致这个问题的原因是什么?



以下是POST调用的完整标题/api/logout.该OPTIONS调用按预期工作,但在POST响应Access-Control-Allow-Origin中缺少标头:

OPTIONS 请求

OPTIONS /api/logout HTTP/1.1
Host: localhost:8080
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
Access-Control-Request-Method: POST
Origin: http://localhost:9000
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36
Access-Control-Request-Headers: x-csrf-token
Accept: */* …
Run Code Online (Sandbox Code Playgroud)

spring spring-security cors jhipster

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

JavaScript(和开发工具)无法访问Cookie,但随XHR请求一起发送(未使用httponly)

我正在使用基于会话的授权在不同的域上使用前端和后端应用程序.我已经设置了一个有效的CORS配置,它可以按预期工作localhost(例如从端口:9000到端口:8080).一旦我在安全域上部署应用程序(两个域都只允许HTTPS),在JavaScript中就不再可以访问CSRF cookie,从而导致前端的错误后续请求(缺少CSRF头).

cookie由Set-Cookie标题中的后端设置,使用HttpOnly标志.它实际上设置在浏览器的某个位置,因为后续请求包含会话cookie和CSRF cookie.尝试通过JavaScript访问它(使用例如document.cookie在控制台中)返回一个空字符串.DevTools of Chrome不会在前端域上显示任何 cookie(后端域甚至没有列出).

我期待cookie被设置并在当前域(前端域)上可见.我正在使用axios库的withCredentials标志.

你有什么想法,为什么不能从JavaScript或Chrome中的DevTools访问cookie?这与Strict-Transport-Security标题有什么关系吗?


1.初始GET响应标头

HTTP/1.1 401 Unauthorized
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: https://[my-frontend-domain]
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Content-Encoding: gzip
Content-Type: application/json;charset=UTF-8
Date: Wed, 20 Sep 2017 11:57:07 GMT
Expires: 0
Pragma: no-cache
Server: Apache-Coyote/1.1
Set-Cookie: CSRF-TOKEN=[some-token]; Path=/
Vary: Origin,Accept-Encoding
X-Content-Type-Options: nosniff
X-Vcap-Request-Id: [some-token]
X-Xss-Protection: 1; mode=block
Content-Length: [some-length]
Strict-Transport-Security: max-age=15768000; includeSubDomains
Run Code Online (Sandbox Code Playgroud)

2.后续POST请求标头

javascript cookies cors hsts strict-transport-security

12
推荐指数
2
解决办法
2378
查看次数

Spring/Hibernate:双向映射,不同步JPQL查询

在实体之间的双向映射(例如@ManyToOne@OneToMany)中,对方需要在每次更改时进行同步,尤其是在使用第二级缓存时.这通常使用辅助方法完成.如果Many部件包含大量条目,那么这些辅助方法不能很好地执行,因为每次都会获取整个集合.一个简单的例子是一个实体Store,它有n Products,但n非常大.添加新ProductStore将需要Store获取整个列表Products,终于将其添加到组(见下面的代码示例).

有人可能会争辩说,在对这种关系进行建模时,可以更好地用从单向关联Product来表示Store.我们在应用程序中使用了很多JPQL查询.在JPQL中,从双方加入实体非常方便.

@OneToManyStore实体中映射关系时是否看到任何问题,Many实际上意味着很多而不仅仅是少数几个,只要让整个关系被懒惰地取出,只是让字段保密,没有getter和setter?据我所知,Hibernate只需要字段来映射关系.如果该集是私有的,那么不会出现性能问题?


Product实体:

@Entity
@Table(name = "product")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class Product {

  @ManyToOne(fetch = FetchType.LAZY)
  private Store store;

  // setter, getter, helper methods
}
Run Code Online (Sandbox Code Playgroud)

Store实体:

@Entity
@Table(name = "store")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class Store { …
Run Code Online (Sandbox Code Playgroud)

java entity hibernate jpql spring-data

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

内容安全策略(CSP)标题:在每个文件上还是仅在实际的HTML页面上?

我目前正在向我们的应用程序添加内容安全策略(CSP)标头.我想知道标题必须附加到哪些文件.经过一番研究,我没有找到明确的答案.

Twitter,例如,只将其添加到实际的HTML文档中.然而,Facebook将其添加到几乎所有资源和HTML文档(HTML,JS,CSS等)中.

那么,是否有必要将Content Security Policy标头添加到每个服务的资源文件或仅添加到HTML文档?它如何与Ajax(JSON内容)请求一起使用?它如何与SPA(仅index.html文件或所有资源)一起使用?如果从安全角度来看没有必要,我不想通过向每个文件添加长CSP标头来减慢页面速度.

编辑:

澄清一下:当附加了CSP标头时,浏览器是否会以不同方式处理图像或其他非文档资源?

content-security-policy

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

使用纯JavaScript签署PDF

随着WebCrypto API的发展和Chrome和Firefox的支持,我想用它来对PDF文档进行数字签名.周围没有太多的文献,但我找到了一些例子[1]和一个名为PKI.js的图书馆[2].在示例中,描述了签名过程,但最终返回签名.我希望我的Base64 PDF文件在签名的Base64字符串中再次返回,但遗憾的是,这不是发生的事情.据我所知,PKI.js也没有提供签署我的Base64 PDF的方法.

有没有办法只使用JavaScript和WebCrypto API签署PDF?私钥可以输入<textarea>或甚至更好地存储在浏览器的证书设置中.

Base64 PDF(来自REST API)→使用JS和证书签名→签名Base64 PDF(发送到REST)

javascript pdf signing sign webcrypto-api

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

如何使用 Vue 循环对象,类似于 PHP?

我有一个我的对象如下

$object_zero = {
    'one' : 'one year',
    'two' : 'two year',
    'three' : 'there year',
    'four' : 'four year',
    'five' : 'five year',
    'six' : 'six year',
    'seven' : 'seven year',
    'eight' : 'eight year',
};
Run Code Online (Sandbox Code Playgroud)

我有一个其他对象如下

$object = { 'one' : '1 Year', 'two' : '2 Year', 'three' : '3 Year', 'akta' : '12', 'mars' : '48' }
Run Code Online (Sandbox Code Playgroud)

我可以用 php 来完成,如下所示。

foreach($object_zero as $key => $val){
     echo $object->$key;
}
Run Code Online (Sandbox Code Playgroud)

那么我该如何使用 vue.js 做到这一点呢?

我无法启动它。我的目标是只编写包含第一个对象的键的文本

<div v-for="(v, k, index) in …
Run Code Online (Sandbox Code Playgroud)

php vue.js vue-component vuejs2

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

Eclipse无法在网页编辑器中打开.vue文件

我想.vue在Eclipse 中将文件作为常规HTML文件打开.我试图右键单击一个.vue文件然后Open WithWeb Page Editor.我还将.vue首选项链接为网页编辑器的新文件关联.

执行上述步骤后,打开文件会导致以下错误.它还抛出一个NullPointerException:

无法创建零件的控件

这是Eclipse中的错误还是我做错了什么?


我的Eclipse版本是:

Eclipse Java EE IDE for Web Developers.

Version: Neon.3 Release (4.6.3)
Build id: 20170314-1500
Run Code Online (Sandbox Code Playgroud)

我在错误日志中看到,.vue在网页编辑器中打开文件后出现以下消息:

eclipse.buildId=4.6.3.M20170301-0400
java.version=1.8.0_92
java.vendor=Oracle Corporation
BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=de_CH
Framework arguments:  -product org.eclipse.epp.package.jee.product -product org.eclipse.epp.package.jee.product
Command-line arguments:  -os win32 -ws win32 -arch x86_64 -product org.eclipse.epp.package.jee.product -data file:/C:/Users/sebsc/eclipse-workspace/ -product org.eclipse.epp.package.jee.product

org.eclipse.jst.pagedesigner
Error
Wed Mar 29 19:27:35 CEST 2017
Unable to display palette for …
Run Code Online (Sandbox Code Playgroud)

eclipse ide editor file-association vue.js

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

查询DSL和Maven:类没有生成,但只在命令行上(在eclipse中工作正常)

我们正在使用Spring Boot,Hibernate,Query DSL和Maven与Java 1.8的设置

最近,我使用下面列出的配置将Query DSL添加到项目中.为了使它工作,我必须在eclipse项目设置中配置Java编译器以允许注释处理,并将查询DSL .jar文件添加到eclipse注释工厂路径.

此设置按预期工作.它生成了自定义Q类,我可以在我的代码中使用它们.当现在mvn clean install在命令行上运行时,我的代码中的每个类都会抛出错误cannot find symbol,因为缺少该类.还有什么我需要配置 - 类似于.jareclipse设置中的文件 - 以使构建过程工作?

编辑:这个问题是不是重复这个问题,因为我没有问为什么这个错误(无法找到一个符号)发生,而是如何QueryDSL配置也命令行上工作.

EDIT2:我现在尝试集成build-helper-maven-plugin使用多个源路径作为输入.这也没有帮助.我还尝试将文件生成到一个src文件夹中.它也没有帮助.

当我第一次在eclipse中编译库时,它mvn compile会在命令行中运行,但mvn clean compile仍然会失败,因为它只是再次使用eclipse的编译文件.apt-maven-plugin被执行,可以在构建过程失败之前看到:

[INFO] --- apt-maven-plugin:1.1.3:process (default) @ project1 ---
[INFO]
[INFO] --- build-helper-maven-plugin:1.9.1:add-source (add-source) @ project1 ---
[INFO] Source directory: C:\Users\user1\git\project1\src\main\generated added.
[INFO]
[INFO] --- maven-processor-plugin:2.2.4:process (process) @ project1 ---
[ERROR] diagnostic: [...]
Run Code Online (Sandbox Code Playgroud)

编辑3:当我删除每个引用Q类的import语句时,构建过程会经历(显然).然而,值得注意的是,Q在这种情况下,类被正确编译.它们 …

java maven querydsl

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

如何在 Chrome 70 的 Javascript 控制台中禁用自动完成功能?

我目前正在学习 javascript 并且遇到了一个烦恼。使用 Chrome javascript 控制台时,它会为我输入的任何内容弹出一个自动完成窗口。我读到从历史记录和急切评估中禁用自动完成可以解决这个问题,但我仍然收到弹出窗口和建议。有什么办法可以摆脱这种情况吗?

自动完成窗口

javascript google-chrome

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