小编Ogn*_*šić的帖子

带有继承的 Spring 验证

我正在尝试验证有点分层的 DTO(formModel,无论您喜欢什么术语)(继承和依赖其他类)。

是否可以使以下模型配置工作:

public abstract class A {

    @NotNull
    private String fieldA1;

    @NotNull
    @Size(min = 2, max = 30)
    private String fieldA2;

    // ... and so on

}


public class B extends A {

    @NotNull
    private String fieldB1;

    @NotNull
    private Xyz fieldB2;

    // and so on
}


public class Xyz {

    @NotNull
    private String fieldXyz1;

    // etc..
}
Run Code Online (Sandbox Code Playgroud)

弹簧架控制器:

@PostMapping(consumes = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity addCustomer(@RequestBody @Valid B customerDto, BindingResult bindingResult) {
// controller logic here
}
Run Code Online (Sandbox Code Playgroud)

问题是:只有似乎“有效”的约束注释是父类 A 上的那些。我提交了一个在 A …

java validation rest spring

8
推荐指数
0
解决办法
4484
查看次数

REST API 设计:一个具有 if/else 逻辑的端点或两个基于角色的独立端点

我有一个 API 设计/版本控制难题。假设我有一个端点/api/customers可以获取所有客户(忽略分页)。但是有一个转折点:如果常规user访问此端点,他们只会获得该用户创建的客户,而没有其他人(我可以检查访问令牌和子字段以确定谁发送了请求)。其他用例:如果admin访问此端点,他们应该获得所有客户,无论是谁获得了他们。

现在我的问题是从 API 设计的角度来看:if/else在 API 控制器本身内进行角色检查以确定我是返回所有(管理员)客户还是特定(用户)客户,或者我应该区分用户的端点和行政?即所有客户的管理员只有端点/api/admin/customers,普通用户仍然可以访问他们的/api/customers?

api rest design-patterns hateoas

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

Spring security 在 AWS ThinkPHP 请求上部署应用程序

我有一个在 AWS 上运行的 Spring Boot 应用程序。有时我会看到弹出一条日志,上面写着并提到 ThinkPHP?

java.lang.IllegalArgumentException: Invalid character found in the request target [/index.php?s=/Index/\think\app/invokefunction&function=call_user_func_array&vars[0]=md5&vars[1][]=HelloThinkPHP21]. 
The valid characters are defined in RFC 7230 and RFC 3986.
at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:491) ~[tomcat-embed-core-9.0.36.jar!/:9.0.36]
Run Code Online (Sandbox Code Playgroud)

以及下面:

org.springframework.security.web.firewall.RequestRejectedException: The request was rejected because the URL contained a potentially malicious String ";"
at org.springframework.security.web.firewall.StrictHttpFirewall.rejectedBlacklistedUrls(StrictHttpFirewall.java:369) ~[spring-security-web-5.3.3.RELEASE.jar!/:5.3.3.RELEASE]
Run Code Online (Sandbox Code Playgroud)

这是令人担忧的原因还是正在发生的事情?通常根本没有流量发生 - 没有请求传入服务器,但这会弹出。

java security spring spring-security amazon-web-services

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

React 自定义挂钩采用动态数据属性

我读过这些关于使用自定义钩子来获取数据的博客文章,例如我们有一个自定义钩子执行 API 调用、设置数据、可能的错误以及旋转的 isFetching 布尔值:

export const useFetchTodos = () => {
    const [data, setData] = useState();
    const [isFetching, setIsFetching] = useState(false);
    const [error, setError] = useState();
    useEffect(() => {
      setIsFetching(true);
      axios.get('api/todos')
        .then(response => setData(response.data)
        .catch(error => setError(error.response.data)
        .finally(() => setFetching(false);
      }, []);
     return {data, isFetching, error};
}
Run Code Online (Sandbox Code Playgroud)

然后,在组件的顶层,我们只需调用即可const { data, error, fetching } = useFetchTodos();,非常好,我们使用获取的所有待办事项来渲染我们的组件。

我不明白的是,我们如何根据组件的内部状态向钩子发送动态数据/参数,而不违反钩子规则?

例如,假设我们有useFetchTodoById(id)一个与上面的钩子定义方式相同的钩子,我们将如何传递它id?假设TodoList呈现 Todos 的组件如下:

export const TodoList = (props) => {
    const [selectedTodo, setSelectedTodo] = useState(); …
Run Code Online (Sandbox Code Playgroud)

rest reactjs react-hooks

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

AWS Java SDK SSL 证书

我有一个 JBoss AS7 连接到 AWS,特别是通过适用于 Java 的 AWS SDK 连接到 S3,我拥有访问权限和密钥,一切都运行良好。我使用 S3 进行各种文件共享。

JBoss 的数据源连接到 AWS RDS。我已经为数据源启用了 SSL 加密 - 我rds-ca-2019-root.pem在standalone.xml 中配置了信任库,并且我的 RDS 数据源连接并验证了 SSL,没有任何问题。但是,当我尝试通过 SDK 连接到 S3 时(启用具有 RDS 证书的信任库时),出现以下异常:

Caused by: com.amazonaws.SdkClientException: Unable to execute HTTP request: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

因此,没有启用信任库:我可以通过 SDK 很好地连接到 S3。当我使用 RDS 证书启用信任库时:我的 SDK -> S3 连接中断。

我不知道需要将什么证书添加到信任库中才能使 SDK 正常工作,或者我是否需要将 SDK 配置为以某种方式使用 TLS?

java ssl ssl-certificate amazon-web-services

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

HashSet与JDK 7/8的顺序和区别

这是一个两部分问题:

  1. HashSet是否实现了一些隐藏的排序机制,或者只是引用文档:It makes no guarantees as to the iteration order of the set; in particular, it does not guarantee that the order will remain constant over time.告诉我,将来MIGHT有时会改变和/或取决于内存使用情况?
  2. 当我在JDK之间切换时,为什么我会得到完全不同的"排序"(我敢说)?

举个例子:

for (int i = 0; i < 1000; i++) {
        Set<String> stringSet = new HashSet<>();
        stringSet.add("qwe");
        stringSet.add("rtz");
        stringSet.add("123");
        stringSet.add("qwea");
        stringSet.add("12334rasefasd");
        stringSet.add("asdxasd");
        stringSet.add("arfskt6734");
        stringSet.add("123121");
        stringSet.add("");
        stringSet.add("qwr");
        stringSet.add("rtzz");
        stringSet.add("1234");
        stringSet.add("qwes");
        stringSet.add("1234rasefasd");
        stringSet.add("asdxasdq");
        stringSet.add("arfskt6743");
        stringSet.add("123121 ");
        stringSet.add(" ");
        System.out.println(stringSet);
    }
Run Code Online (Sandbox Code Playgroud)

无论我运行多少次,都会产生以下输出:

JDK 7: [, , 123, qwea, asdxasdq, qwe, qwr, 123121 , …

java collections hashset

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

在 Django ModelForm 中传递相关对象的字段

我有一个 Django 模型类,它扩展了django.contrib.auth.models.User

class MyModel(models.Model):
  user = models.OneToOneField(User, models.CASCADE, unique=True)
  bio = models.TextField()
  date_of_birth = models.DateField()
Run Code Online (Sandbox Code Playgroud)

在这个模型中,我正在制作一个 ModelForm:

class MyModelForm(forms.ModelForm):

  class Meta:
    model = MyModel
    fields = ['bio', 'date_of_birth']
Run Code Online (Sandbox Code Playgroud)

如何告诉 MyModelForm 接受用户的字段,例如username, first_name, last_name

我可以添加类 Meta 字段中的示例,['bio', 'date_of_birth', 'user']但这只会为我提供下拉菜单,以选择 MyModelForm 中的 MyModel 与谁相关。

['bio', 'date_of_birth', 'user.first_name']会抛出异常django.core.exceptions.FieldError: Unknown field(s) (user.first_name) specified for MyModel

编辑:这是回溯 https://pastebin.com/0T42VKEP

python django

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

python 地图、列表(地图)、lambda 和性能

我已经做了一段时间的程序程序员,只是试图将我的思维方式转变为使用函数式编程(目前在 Python 3 中)。因此,我没有编写 for-each 循环,而是试图掌握maplist(map(..))

假设我有一个简单的for-in循环,它执行一些资源繁重的计算(print为了简单起见,我将在此处替换):

arr = [1,2,3,4]    
for x in arr:
    print(x)
Run Code Online (Sandbox Code Playgroud)

现在,当我尝试执行以下操作时

map(lambda x: print(x), arr)
Run Code Online (Sandbox Code Playgroud)

什么也没发生,直到,我把它包装在一个列表中,它完成了我的超重print功能:

list(map(lambda x: print(x), arr))
Run Code Online (Sandbox Code Playgroud)

为什么?我错过了什么?我知道 map 返回一个迭代器,它应该节省内存,而不是立即保存整个列表。但是我的超重print功能什么时候会被触发呢?

python lambda functional-programming

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