On Fri, 3 Nov 2023 22:18:22 GMT, Francisco Ferrari Bihurriet 
<fferr...@openjdk.org> wrote:

>> The implementation of this proposal is based on the requirements, 
>> specification and design choices described in the [JDK-8319332] ticket and 
>> its respective CSR [JDK-8319333]. What follows are implementation notes 
>> organized per functional component, with the purpose of assisting to 
>> navigate the code changes in this pull-request.
>> 
>> ## Security properties loading (overview)
>> 
>> A new static class named `SecPropLoader` (nested within 
>> `java.security.Security`) is introduced to handle the loading of all 
>> security properties. Its method `loadAll` is the first one to be called, at 
>> `java.security.Security` static class initialization. The master security 
>> properties file is then loaded by `loadMaster`. When additional security 
>> properties files are allowed (the security property 
>> `security.overridePropertiesFile` is set to `true`) and the 
>> `java.security.properties` system property is passed, the method `loadExtra` 
>> handles the extra load.
>> 
>> The master properties file is loaded in `OVERRIDE` mode, meaning that the 
>> map of properties is originally empty. Any failure occurred while loading 
>> these properties is considered fatal. The extra properties file 
>> (`java.security.properties`) may be loaded in `OVERRIDE` or `APPEND` mode. 
>> Any failure in this case is ignored. This behavior maintains compatibility 
>> with the previous implementation.
>> 
>> While the `java.security.properties` system property is documented to accept 
>> an URL type of value, filesystem path values are supported in the same way 
>> that they were prior to this enhancement. Values are then interpreted as 
>> paths and, only if that fails, are considered URLs. In the latter case, 
>> there is one more attempt after opening the stream to check if there is a 
>> local file path underneath (e.g. the URL has the form of 
>> `file:///path/to/a/local/file`). The reason for preferring paths over URLs 
>> is to support relative path file inclusion in properties files.
>> 
>> ## Loading security properties from paths (`loadFromPath` method)
>> 
>> When loading a properties file from a path, the normalized file location is 
>> stored in the static field `currentPath`. This value is the current base to 
>> resolve any relative path encountered while handling an _include_ 
>> definition. Normalized paths are also saved in the `activePaths` set to 
>> detect recursive cycles. As we move down or up in the _includes_ stack, 
>> `currentPath` and `activePaths` values are updated.
>> 
>> ## Loading security properties from URLs (`loadFromUrl` method)
>> 
>> The extra properti...
>
> Francisco Ferrari Bihurriet has updated the pull request incrementally with 
> one additional commit since the last revision:
> 
>   8319332: use Path::of(URI) to deal with file URLs
>   
>   Instead of the previously introduced FileURLConnection::getFile(), use
>   Path::of(URI), leaving some file URL corner-cases without relative
>   imports support.
>   
>   Further details in 
> https://github.com/openjdk/jdk/pull/16483#discussion_r1382111155
>   
>   Co-authored-by: Martin Balao <mba...@redhat.com>
>   Co-authored-by: Francisco Ferrari Bihurriet <fferr...@redhat.com>

My main concern is with the test case, especially as the output it produces in 
the logs is pretty much restricted to processes stopping and starting.  That's 
not new to this change, but the greater weight placed on the test by this 
change does exacerbate this problem. I'm not sure how one would go about 
debugging a problem from that output.

The code itself is very sparse in comments. In the case of the test, it would 
help if at least each method could state what it was intending to test.  In 
particular, I don't see a test of how properties from one test file override 
those from another, and how the ordering affects this.

For example, with an external property file `extra.properties` containing 
`a=c`, the end result of the following:

~~~
a=b
include extra.properties
~~~
would be `a=c`, whereas:
~~~
include extra.properties
a=b
~~~
would be `a=b`. 

I don't see any test here that confirms that a property ends up set to an 
expected value, though I may be missing this because the structure of the test 
is quite hard to follow.

Also, is `handeRequest` deliberate or a typo of `handleRequest`?

-------------

PR Review: https://git.openjdk.org/jdk/pull/16483#pullrequestreview-1725169855

Reply via email to