seandaniels
01/12/2023, 5:38 PM/kb
"directory" to <http://mydomain.helpjuice.com|mydomain.helpjuice.com>
as described here: https://help.helpjuice.com/en_US/helpjuice-subdirseandaniels
01/12/2023, 5:40 PMbdw429s
01/12/2023, 6:50 PMbdw429s
01/12/2023, 6:50 PMseandaniels
01/12/2023, 6:50 PMbdw429s
01/12/2023, 6:50 PMpath-prefix('/reports') -> reverse-proxy({'<http://reports1.mydomain.com>','<http://reports2.mydomain.com>'})
bdw429s
01/12/2023, 6:51 PM/reports
folder would round robin between the two domains listedseandaniels
01/12/2023, 6:51 PMbdw429s
01/12/2023, 6:51 PMbdw429s
01/12/2023, 6:51 PMbdw429s
01/12/2023, 6:52 PMseandaniels
01/12/2023, 6:52 PMseandaniels
01/12/2023, 6:53 PMbdw429s
01/12/2023, 6:53 PMbdw429s
01/12/2023, 6:53 PMseandaniels
01/12/2023, 6:53 PMbdw429s
01/12/2023, 6:53 PMbdw429s
01/12/2023, 6:54 PMseandaniels
01/12/2023, 6:54 PMbdw429s
01/12/2023, 6:54 PMseandaniels
01/12/2023, 6:55 PMbdw429s
01/12/2023, 6:55 PMbdw429s
01/12/2023, 6:56 PMbdw429s
01/12/2023, 6:56 PMseandaniels
01/12/2023, 6:57 PMbdw429s
01/12/2023, 6:57 PMbdw429s
01/12/2023, 6:57 PMbdw429s
01/12/2023, 6:58 PMseandaniels
01/12/2023, 6:58 PMbdw429s
01/12/2023, 6:58 PMbdw429s
01/12/2023, 6:58 PMbdw429s
01/12/2023, 6:58 PMbdw429s
01/12/2023, 7:00 PMbdw429s
01/12/2023, 7:00 PMbdw429s
01/12/2023, 7:01 PMbdw429s
01/12/2023, 7:02 PMseandaniels
01/12/2023, 7:02 PMbdw429s
01/12/2023, 7:02 PMbdw429s
01/12/2023, 7:03 PMbdw429s
01/12/2023, 7:03 PMbdw429s
01/12/2023, 7:04 PMbdw429s
01/12/2023, 7:04 PMbdw429s
01/12/2023, 7:05 PMbdw429s
01/12/2023, 7:06 PMseandaniels
01/12/2023, 7:07 PMbdw429s
01/12/2023, 7:07 PMseandaniels
01/12/2023, 7:19 PMbdw429s
01/12/2023, 7:20 PMseandaniels
01/12/2023, 7:20 PMbdw429s
01/12/2023, 7:21 PM<http://original.com/kb/foo|original.com/kb/foo>
and your proxy is pointing to
<http://new.com/|new.com/>
then I believe the same URI will be appended so it hits
<http://new.com/kb/foo|new.com/kb/foo>
bdw429s
01/12/2023, 7:21 PMbdw429s
01/12/2023, 7:21 PMbdw429s
01/12/2023, 7:22 PMseandaniels
01/12/2023, 7:22 PMpath-prefix('/kb') -> reverse-proxy({'<http://dealstream.helpjuice.com>'})
bdw429s
01/12/2023, 7:23 PMseandaniels
01/12/2023, 7:23 PM/kb/contact-us
should pull <http://dealstream.helpjuice.com/contact-us>
seandaniels
01/12/2023, 7:23 PMbdw429s
01/12/2023, 7:23 PMsoWait, wait-- do you DO want the original URI to changeshould pull/kb/contact-us
<http://dealstream.helpjuice.com/contact-us>
seandaniels
01/12/2023, 7:24 PMbdw429s
01/12/2023, 7:24 PMseandaniels
01/12/2023, 7:24 PMbdw429s
01/12/2023, 7:24 PM/kb/contact-us
would pull http://dealstream.helpjuice.com/kb/contact-usbdw429s
01/12/2023, 7:25 PMseandaniels
01/12/2023, 7:25 PMbdw429s
01/12/2023, 7:25 PMbdw429s
01/12/2023, 7:25 PMseandaniels
01/12/2023, 7:25 PMbdw429s
01/12/2023, 7:25 PMseandaniels
01/12/2023, 7:26 PMbdw429s
01/12/2023, 7:26 PMbdw429s
01/12/2023, 7:26 PMpath-prefix('/kb')
is your predicatebdw429s
01/12/2023, 7:27 PMseandaniels
01/12/2023, 7:27 PMbdw429s
01/12/2023, 7:27 PMreverse-proxy(...)
is currently your only handlerseandaniels
01/12/2023, 7:27 PMbdw429s
01/12/2023, 7:27 PMbdw429s
01/12/2023, 7:27 PMseandaniels
01/12/2023, 7:27 PMbdw429s
01/12/2023, 7:28 PMbdw429s
01/12/2023, 7:28 PMregex( '^/kb/(.*)$' )
bdw429s
01/12/2023, 7:29 PMserver.json
but you can have two handlers like this example shows
regex('(.*).css') -> { rewrite('${1}.xcss'); set(attribute='%{o,rewritten}', value=true) }
bdw429s
01/12/2023, 7:29 PMseandaniels
01/12/2023, 7:30 PMbdw429s
01/12/2023, 7:30 PMregex( '^/kb/(.*)$' ) -> { rewrite('\${1}'); reverse-proxy({'<http://dealstream.helpjuice.com>'}) }
bdw429s
01/12/2023, 7:32 PM\
is necessary to escape the ${1}
in your server.json
since Undertow uses the same syntax as CommandBox's system setting expansions for it's predicate context valuesbdw429s
01/12/2023, 7:32 PMbdw429s
01/12/2023, 7:33 PM--trace
logging will show you what the request gets rewritten to prior to proxying it so you can confirmseandaniels
01/12/2023, 7:34 PMMichael Schmidt
01/12/2023, 7:34 PMbdw429s
01/12/2023, 7:34 PMregex( '^/kb/(.*)$' ) -> {
rewrite('\${1}');
reverse-proxy({'<http://dealstream.helpjuice.com>'})
}
bdw429s
01/12/2023, 7:35 PMseandaniels
01/12/2023, 7:35 PMbdw429s
01/12/2023, 7:36 PMseandaniels
01/12/2023, 7:36 PMparse error: Invalid escape at line 10, column 111
<- that;s the line with the rulebdw429s
01/12/2023, 7:37 PMrules
array there is a rulesFile
property which can contain a comma-delimited list of file globbing patterns of files to usebdw429s
01/12/2023, 7:37 PMbdw429s
01/12/2023, 7:37 PMserver.json
or undertow when parsing the predicate?bdw429s
01/12/2023, 7:38 PM\
to be escaped again for the JSONbdw429s
01/12/2023, 7:38 PMseandaniels
01/12/2023, 7:38 PMseandaniels
01/12/2023, 7:39 PM2023-01-12 14:38:13 Set verboseErrors = true
2023-01-12 14:38:14 parse error: Invalid escape at line 10, column 111
bdw429s
01/12/2023, 7:39 PMregex( '^/kb/(.*)$' ) -> { rewrite('\\${1}'); reverse-proxy({'<http://dealstream.helpjuice.com>'}) }
bdw429s
01/12/2023, 7:39 PMseandaniels
01/12/2023, 7:39 PMbdw429s
01/12/2023, 7:39 PMjq
whcih is why I didn't recognize itbdw429s
01/12/2023, 7:39 PMjq
to screw around with the JSONbdw429s
01/12/2023, 7:40 PMseandaniels
01/12/2023, 7:40 PMbdw429s
01/12/2023, 7:40 PM${1}
• One additional backslash so the JSON parser ignore the original \
bdw429s
01/12/2023, 7:40 PMbdw429s
01/12/2023, 7:41 PMserver set web.rules[1]="regex( '^/kb/(.*)$' ) -> { rewrite('\\\\${1}'); reverse-proxy({'<http://dealstream.helpjuice.com>'}) } "
bdw429s
01/12/2023, 7:41 PM\\
for the CLI parser!seandaniels
01/12/2023, 7:43 PMseandaniels
01/12/2023, 7:43 PMregex( '^/kb/(.*)$' ) -> { rewrite('\\${1}'); reverse-proxy({'<http://dealstream.helpjuice.com>'}) }
bdw429s
01/12/2023, 7:43 PMbdw429s
01/12/2023, 7:43 PMbdw429s
01/12/2023, 7:43 PMbdw429s
01/12/2023, 7:43 PMseandaniels
01/12/2023, 7:44 PMbdw429s
01/12/2023, 7:44 PMbdw429s
01/12/2023, 7:44 PMbdw429s
01/12/2023, 7:44 PMseandaniels
01/12/2023, 7:45 PMseandaniels
01/12/2023, 7:45 PMbdw429s
01/12/2023, 7:45 PMserver.json
server set trace=true
or via env var on your container
box_server_trace=true
bdw429s
01/12/2023, 7:45 PMbdw429s
01/12/2023, 7:46 PMseandaniels
01/12/2023, 7:46 PMseandaniels
01/12/2023, 7:46 PMseandaniels
01/12/2023, 7:46 PMbdw429s
01/12/2023, 7:46 PMbdw429s
01/12/2023, 7:47 PMbdw429s
01/12/2023, 7:47 PMserver start
all the way :_)seandaniels
01/12/2023, 7:47 PMseandaniels
01/12/2023, 7:47 PMseandaniels
01/12/2023, 7:51 PMbdw429s
01/12/2023, 7:51 PMbdw429s
01/12/2023, 7:51 PMbdw429s
01/12/2023, 7:52 PMbdw429s
01/12/2023, 7:52 PM--debug
mode will give you some data, but I don't recall if it will have everything you want in the server rules departmentseandaniels
01/12/2023, 7:53 PM2023-01-12 14:51:29 [DEBUG] runwar.context: requested: '<http://localhost:8080/kb/contact-us>'
2023-01-12 14:51:29 [TRACE] io.undertow.predicate: Path suffix [secrets.json] DOES NOT MATCH input [/kb/contact-us] for HttpServerExchange{ GET /kb/contact-us}.
2023-01-12 14:51:29 [TRACE] io.undertow.predicate: Predicate [path-suffix( 'secrets.json' )] resolved to false for HttpServerExchange{ GET /kb/contact-us}.
2023-01-12 14:51:29 [TRACE] io.undertow.predicate: Regex pattern [^/kb/(.*)$] MATCHES input [/kb/contact-us] for HttpServerExchange{ GET /kb/contact-us}.
2023-01-12 14:51:29 [TRACE] io.undertow.predicate: Storing regex match group [0] as [/kb/contact-us] for HttpServerExchange{ GET /kb/contact-us}.
2023-01-12 14:51:29 [TRACE] io.undertow.predicate: Storing regex match group [1] as [contact-us] for HttpServerExchange{ GET /kb/contact-us}.
2023-01-12 14:51:29 [TRACE] io.undertow.predicate: Predicate [regex( pattern='^/kb/(.*)$', value='%{RELATIVE_PATH}', full-match='false', case-sensitive='false' )] resolved to true. Next handler is [PredicatesHandler with 2 predicates] for HttpServerExchange{ GET /kb/contact-us}.
2023-01-12 14:51:29 [TRACE] io.undertow.predicate: Executing handler [rewrite( '${1}' )] for HttpServerExchange{ GET /kb/contact-us}.
2023-01-12 14:51:29 [DEBUG] io.undertow.predicate: Request rewritten to [contact-us] for HttpServerExchange{ GET /kb/contact-us}.
2023-01-12 14:51:29 [TRACE] io.undertow.predicate: Executing handler [reverse-proxy( '<http://dealstream.helpjuice.com>' )] for HttpServerExchange{ GET contact-us}.
2023-01-12 14:51:29 [DEBUG] io.undertow.server.handlers.proxy: Sending request ClientRequest{path='contact-us', method=GET, protocol=HTTP/1.1} to target <http://dealstream.helpjuice.com/50.16.128.128:80|dealstream.helpjuice.com/50.16.128.128:80> for exchange HttpServerExchange{ GET contact-us}
2023-01-12 14:51:29 [DEBUG] io.undertow.server.handlers.proxy: Sent request ClientRequest{path='contact-us', method=GET, protocol=HTTP/1.1} to target 172.29.0.1 for exchange HttpServerExchange{ GET contact-us}
bdw429s
01/12/2023, 7:53 PMseandaniels
01/12/2023, 7:53 PMHttpServerExchange{ GET contact-us}
shold probably be
HttpServerExchange{ GET /contact-us}
seandaniels
01/12/2023, 7:53 PMbdw429s
01/12/2023, 7:53 PMregex( '^/kb/(.*)$' ) -> { rewrite('/\\${1}'); reverse-proxy({'<http://dealstream.helpjuice.com>'}) }
bdw429s
01/12/2023, 7:53 PMbdw429s
01/12/2023, 7:54 PMbdw429s
01/12/2023, 7:54 PMbdw429s
01/12/2023, 7:55 PMbdw429s
01/12/2023, 7:55 PMbdw429s
01/12/2023, 7:55 PMbdw429s
01/12/2023, 7:56 PMbdw429s
01/12/2023, 7:56 PMbdw429s
01/12/2023, 7:56 PMseandaniels
01/12/2023, 7:56 PMbdw429s
01/12/2023, 7:56 PMbdw429s
01/12/2023, 7:56 PMbdw429s
01/12/2023, 7:57 PMbdw429s
01/12/2023, 7:57 PMbdw429s
01/12/2023, 7:58 PMseandaniels
01/12/2023, 7:58 PMFROM ortussolutions/commandbox:lucee-light
base image - shouldn't that always get the latest? Do I need to destroy my containers and rebuild them to get the latestbdw429s
01/12/2023, 7:59 PMseandaniels
01/12/2023, 7:59 PMbdw429s
01/12/2023, 7:59 PMdocker build
always actively pulls the latestbdw429s
01/12/2023, 7:59 PMdocker pull ...
or use
docker build no-cache
bdw429s
01/12/2023, 8:00 PMseandaniels
01/12/2023, 8:01 PM2023-01-12 14:59:36 [TRACE] io.undertow.predicate: Regex pattern [^/kb/(.*)$] MATCHES input [/kb/contact-us] for HttpServerExchange{ GET /kb/contact-us}.
2023-01-12 14:59:36 [TRACE] io.undertow.predicate: Storing regex match group [0] as [/kb/contact-us] for HttpServerExchange{ GET /kb/contact-us}.
2023-01-12 14:59:36 [TRACE] io.undertow.predicate: Storing regex match group [1] as [contact-us] for HttpServerExchange{ GET /kb/contact-us}.
2023-01-12 14:59:36 [TRACE] io.undertow.predicate: Predicate [regex( pattern='^/kb/(.*)$', value='%{RELATIVE_PATH}', full-match='false', case-sensitive='false' )] resolved to true. Next handler is [PredicatesHandler with 2 predicates] for HttpServerExchange{ GET /kb/contact-us}.
2023-01-12 14:59:36 [TRACE] io.undertow.predicate: Executing handler [rewrite( '/${1}' )] for HttpServerExchange{ GET /kb/contact-us}.
2023-01-12 14:59:36 [DEBUG] io.undertow.predicate: Request rewritten to [/contact-us] for HttpServerExchange{ GET /kb/contact-us}.
2023-01-12 14:59:36 [TRACE] io.undertow.predicate: Executing handler [reverse-proxy( '<http://dealstream.helpjuice.com>' )] for HttpServerExchange{ GET /contact-us}.
2023-01-12 14:59:36 [DEBUG] io.undertow.server.handlers.proxy: Sending request ClientRequest{path='/contact-us', method=GET, protocol=HTTP/1.1} to target <http://dealstream.helpjuice.com/50.16.128.128:80|dealstream.helpjuice.com/50.16.128.128:80> for exchange HttpServerExchange{ GET /contact-us}
2023-01-12 14:59:36 [DEBUG] io.undertow.server.handlers.proxy: Sent request ClientRequest{path='/contact-us', method=GET, protocol=HTTP/1.1} to target 172.29.0.1 for exchange HttpServerExchange{ GET /contact-us}
bdw429s
01/12/2023, 8:01 PM<http://dealstream.helpjuice.com/contact-us>
a real example or a fake one? Because when I hit it
• it still redirects me to HTTPS
• I get a "Couldn't find what you're looking for?" pageseandaniels
01/12/2023, 8:02 PMbdw429s
01/12/2023, 8:03 PM*strict-transport-security:* max-age=0
header. If that was set earlier to something other than 0, our browsers probably remember itseandaniels
01/12/2023, 8:03 PMbdw429s
01/12/2023, 8:03 PMseandaniels
01/12/2023, 8:03 PMbdw429s
01/12/2023, 8:04 PMbdw429s
01/12/2023, 8:04 PMseandaniels
01/12/2023, 8:04 PMseandaniels
01/12/2023, 8:04 PMbdw429s
01/12/2023, 8:04 PMbdw429s
01/12/2023, 8:05 PMbdw429s
01/12/2023, 8:05 PMseandaniels
01/12/2023, 8:05 PM*strict-transport-security:* max-age=0
headerbdw429s
01/12/2023, 8:05 PMseandaniels
01/12/2023, 8:05 PMbdw429s
01/12/2023, 8:06 PMmax-age=0
just turns it off, but I assume whatever setting you changed previously had a non-zero settingseandaniels
01/12/2023, 8:07 PMseandaniels
01/12/2023, 8:08 PM2023-01-12 14:59:36 [TRACE] io.undertow.client.request: Processing header 'Host'
2023-01-12 14:59:36 [TRACE] io.undertow.client.request: Processing header value 'localhost:8080'
2023-01-12 14:59:36 [TRACE] io.undertow.client.request: Processing header 'X-Forwarded-Host'
2023-01-12 14:59:36 [TRACE] io.undertow.client.request: Processing header value 'localhost'
2
bdw429s
01/12/2023, 8:09 PMbdw429s
01/12/2023, 8:09 PMseandaniels
01/12/2023, 8:11 PM2023-01-12 14:59:36 [TRACE] io.undertow.client.request: Processing header 'X-Forwarded-For'
2023-01-12 14:59:36 [TRACE] io.undertow.client.request: Processing header value '172.29.0.1'
And the HelpJuice docs specifically say the X-Forwarded-For header needs to be set to <http://dealstream.helpjuice.com|dealstream.helpjuice.com>
bdw429s
01/12/2023, 8:11 PMbdw429s
01/12/2023, 8:14 PMbdw429s
01/12/2023, 8:14 PMseandaniels
01/12/2023, 8:16 PM<http://dealstream.helpjuice.com|dealstream.helpjuice.com>
resolves to, I get the exact Heroku page I'm seeing: http://50.16.128.128/contact-usseandaniels
01/12/2023, 8:17 PMseandaniels
01/12/2023, 8:18 PMIf you're rewriting the requests, make sure that you're also changing the value of the Origin HTTP header to the account's subdomain in HJ: <https://yourAccount.helpjuice.com>.
seandaniels
01/12/2023, 8:19 PMseandaniels
01/12/2023, 8:21 PMbdw429s
01/12/2023, 8:22 PMbdw429s
01/12/2023, 8:22 PMseandaniels
01/12/2023, 8:22 PMbdw429s
01/12/2023, 8:22 PMseandaniels
01/12/2023, 8:24 PMbdw429s
01/12/2023, 8:26 PMX-Forwarded-For
is the IP/host of the clientbdw429s
01/12/2023, 8:27 PMbdw429s
01/12/2023, 8:27 PMseandaniels
01/12/2023, 8:27 PMbdw429s
01/12/2023, 8:28 PMbdw429s
01/12/2023, 8:28 PMseandaniels
01/12/2023, 8:28 PMseandaniels
01/12/2023, 8:34 PMbdw429s
01/12/2023, 8:34 PMseandaniels
01/12/2023, 8:35 PMset(attribute='%{o,X-Forwarded-For}', value='<http://dealstream.helpjuice.com|dealstream.helpjuice.com>');
to the handler does not change the value from the 172 ip the proxy request sendsbdw429s
01/12/2023, 8:35 PMseandaniels
01/12/2023, 8:35 PMseandaniels
01/12/2023, 8:41 PMbdw429s
01/12/2023, 8:42 PMbdw429s
01/12/2023, 8:43 PMbdw429s
01/12/2023, 8:43 PMseandaniels
01/12/2023, 8:44 PMbdw429s
01/12/2023, 8:50 PMseandaniels
01/12/2023, 8:51 PMbdw429s
01/12/2023, 8:51 PMseandaniels
01/12/2023, 8:51 PMbdw429s
01/12/2023, 8:54 PMseandaniels
01/12/2023, 8:54 PMbdw429s
01/12/2023, 8:54 PMseandaniels
01/12/2023, 8:55 PMbdw429s
01/12/2023, 8:55 PMbdw429s
01/12/2023, 8:55 PMbdw429s
01/12/2023, 8:56 PMreuseXForwarded
variable which does this
* @param reuseXForwarded should any existing X-Forwarded-For header be used or should it be overwritten. should any existing X-Forwarded-For header be used or should it be overwritten.
bdw429s
01/12/2023, 8:57 PMseandaniels
01/12/2023, 8:57 PMbdw429s
01/12/2023, 8:58 PMbdw429s
01/12/2023, 8:58 PMbdw429s
01/12/2023, 8:59 PMbdw429s
01/12/2023, 9:01 PMseandaniels
01/12/2023, 9:01 PMDave Merrill
01/12/2023, 9:01 PMbdw429s
01/12/2023, 9:01 PMbdw429s
01/12/2023, 9:03 PMtrue
(or make it configurable). It would need to be compiled into a jar and added to your libDirs
. CommandBox actually has a few custom predicates and handlers built in that I wrote such as cf-admin()
and block-external()
seandaniels
01/12/2023, 9:05 PMbdw429s
01/12/2023, 9:05 PMbdw429s
01/12/2023, 9:06 PMseandaniels
01/12/2023, 9:06 PMbdw429s
01/12/2023, 9:06 PMbdw429s
01/12/2023, 9:07 PMbdw429s
01/12/2023, 9:07 PMseandaniels
01/12/2023, 9:08 PMseandaniels
01/12/2023, 9:08 PMbdw429s
01/12/2023, 10:18 PMrewrite-host-header
then I get an HTTPS redirect, which is expected from the browser's behavior
reverse-proxy(hosts={'<http://dealstream.helpjuice.com>'},rewrite-host-header=true)
If you can figure out how to actually disable HTTP for your docs site, that may finally workbdw429s
01/12/2023, 10:19 PMX-Forwarded-Proto=https
X-Forwarded-Port=443
it still tries to redirect. But it's up to the remote server to decide if it will allow the upstream to be HTTPS or if the proxy must use HTTPS as wellbdw429s
01/12/2023, 10:22 PMX-Forwarded-For=<http://dealstream.helpjuice.com|dealstream.helpjuice.com>,127.0.0.1
it doesn't appear to do what we need.bdw429s
01/12/2023, 10:24 PMbdw429s
01/12/2023, 10:25 PM<https://127.0.0.1/contact-us>
not
<https://127.0.0.1/kb/contact-us>
(which leads to a CommandBox 404) but that's to be expected as the proxied server knows nothing of our little kb
prefix. I also had to run my local test site on ports 80/443 or the proxy redirects got confused, lol. I've run into that before with SSL redirects.seandaniels
01/12/2023, 10:40 PMseandaniels
01/12/2023, 10:41 PMbdw429s
01/12/2023, 10:41 PMbdw429s
01/12/2023, 10:41 PMseandaniels
01/12/2023, 10:41 PMbdw429s
01/12/2023, 11:03 PMbdw429s
01/12/2023, 11:03 PMserver.json
{
"app": {
"libDirs": "lib"
},
"web": {
"http": {
"port": "80"
},
"rules": [
"regex( '^/kb/(.*)$' ) -> { rewrite('/\\${1}'); reverse-proxy-ssl(hosts={'<https://dealstream.helpjuice.com>'}, rewrite-host-header=true) } "
],
"SSL": {
"enable": "true",
"port": "443"
}
}
}
bdw429s
01/12/2023, 11:03 PMbdw429s
01/12/2023, 11:04 PM<https://127.0.0.1/kb/228854-searching-listings/1141270-how-do-i-search-for-listings-on-a-desktop-or-laptop-computer>
bdw429s
01/12/2023, 11:04 PMbdw429s
01/13/2023, 12:14 AMloadBalancingProxyClient.addHost(url, new UndertowXnioSsl( Xnio.getInstance(), OptionMap.builder().getMap() ) );
which creates a default SSL contextbdw429s
01/13/2023, 12:14 AMbdw429s
01/13/2023, 12:16 AMjavac -cp C:\Users\Brad\.CommandBox\lib\runwar-4.7.19-SNAPSHOT.jar -d C:\Users\Brad\Desktop\sandbox\proxy\bin\ C:\Users\Brad\Desktop\sandbox\proxy\src\fun\test\ProxyHandlerBuilder.java
C:\Users\Brad\Desktop\sandbox\proxy\bin>jar --create --file my.jar fun\test\ProxyHandlerBuilder$Wrapper.class fun\test\ProxyHandlerBuilder.class
and then copied in the META-INF/resources
folder to the jarbdw429s
01/13/2023, 12:17 AMbdw429s
01/13/2023, 12:17 AMbdw429s
01/13/2023, 12:18 AMbdw429s
01/13/2023, 12:19 AMpath-prefix-nocase()
predicate since path-prefix()
is case sensitive which totally makes it worthless for security checks on Windows.bdw429s
01/13/2023, 12:19 AMregex()
-- I'd like to create a regex-nocase()
which defaults case-sensitive=true
since it's a pain to always have to include that (and then you're forced to use named params)seandaniels
01/13/2023, 12:21 AMseandaniels
01/13/2023, 12:21 AMbdw429s
01/13/2023, 2:42 AM