Я использую встроенный Jetty 9.3.8.v20160314 от Scala (Scala является второстепенным здесь, это чисто Jetty вопрос), сконфигурированный так:Как удалить конечную косую черту из встроенных URL-адресов Jetty?
val loginService = new RepoLoginService(usersRepository, signInsRepo)
val server = new Server(8080)
server.addBean(loginService)
val security = new ConstraintSecurityHandler()
server.setHandler(security)
val constraint = new Constraint()
constraint.setName("auth")
constraint.setAuthenticate(true)
constraint.setRoles(Array[String]("user", "admin"))
val mapping = new ConstraintMapping()
mapping.setPathSpec("/*")
mapping.setConstraint(constraint)
security.setConstraintMappings(Collections.singletonList(mapping))
security.setAuthenticator(new BasicAuthenticator())
security.setLoginService(loginService)
val mapper = prepareJacksonObjectMapper
val listAccountsController = new ContextHandler("/api/accounts")
listAccountsController.setHandler(new ListAccountsController(mapper, accountsRepository))
val importBankAccountsController = new ContextHandler("/api/bank-account-transactions/import")
importBankAccountsController.setHandler(new ImportBankAccountTransactionsController(mapper, bankAccountTransactionsRepo))
val contexts = new ContextHandlerCollection()
contexts.setHandlers(Array(listAccountsController, importBankAccountsController))
security.setHandler(contexts)
server.start()
server.join()
Обратите внимание на контекст для listAccountsController
: /api/accounts
. Когда я свернуться /api/accounts
, я получаю редирект /api/accounts/
(обратите внимание на слэш):
$ curl --silent --verbose --user francois:francois http://localhost:8080/api/accounts
* Trying ::1...
* Connected to localhost (::1) port 8080 (#0)
* Server auth using Basic with user 'francois'
> GET /api/accounts HTTP/1.1
> Host: localhost:8080
> Authorization: Basic ZnJhbmNvaXM6ZnJhbmNvaXM=
> User-Agent: curl/7.43.0
> Accept: */*
>
< HTTP/1.1 302 Found
< Date: Sun, 22 May 2016 03:54:44 GMT
< Location: http://localhost:8080/api/accounts/
< Content-Length: 0
< Server: Jetty(9.3.8.v20160314)
<
* Connection #0 to host localhost left intact
Я попытался добавить вызов clearAliasChecks()
, который я не уверен, что даже с этим связано. Я также попытался изменить mapping.setPathSpec("/*")
на mapping.setPathSpec("/")
, потому что я прочитал answer on Tomcat not adding the trailing slash, но это, вероятно, не относится ко мне.
Что я должен изменить, чтобы предотвратить косые черты?
Это не ответ на вопрос OPS. Он хотел знать, как обойти это. Как и я, по разным причинам. – kevr
@kevr ответ заключается не в том, чтобы полагаться на контекстный корень, чтобы достичь этой цели. сохраните свой корневой контекст в «/», и ваши реализации могут делать все, что вы хотите от них. –