На основе комментариев @dur я изменил свой код, чтобы использовать SecurityContextHolder и получить текущую авторизацию контекста потока.
Мой компонент теперь:
@Component
public class AuthRequestInfo {
private AuthorizationService authorizationService;
public AuthRequestInfo(AuthorizationService authorizationService) {
this.authorizationService = authorizationService;
}
public Authorization getAuthorization(){
Claims claims = (Claims)SecurityContextHolder.getContext().getAuthentication().getPrincipal();
String key = claims.get(KEY_CLAIM).toString();
return this.authorizationService.findByExampleOptional(Authorization.builder().key(key).build())
.orElseThrow(new UnauthorizedException(INVALID_TWOFACE_AUTHORIZATION_HEADER));
}
}
Проверка подлинности SecurityContextHolder была установлена на GenericFilterBean. Теперь у меня нет проблем.
find . -type f -print0 | xargs -0 -n 1 sed -i -e 's/from/to/g'
первая часть этого является командой находки для нахождения файлов, которые Вы хотите изменить. Вы, возможно, должны изменить это соответственно. Эти xargs
команда берет каждый файл найденная находка и применяется эти sed
команда к нему. Эти sed
команда берет каждый экземпляр от и заменяет его к . Это - стандартное регулярное выражение, поэтому измените его, как Вам нужно.
, Если Вы используете svn, остерегаются. Ваши .svn-каталоги будут поиском и замененный также. Необходимо исключить их, например, как это:
find . ! -regex ".*[/]\.svn[/]?.*" -type f -print0 | xargs -0 -n 1 sed -i -e 's/from/to/g'
или
find . -name .svn -prune -o -type f -print0 | xargs -0 -n 1 sed -i -e 's/from/to/g'
Как Paul сказал, Вы хотите сначала найти файлы, Вы хотите отредактировать и затем отредактировать их. Альтернатива находке использования должна использовать GNU grep (значение по умолчанию на Ubuntu), например:
grep -r -l from . | xargs -0 -n 1 sed -i -e 's/from/to/g'
можно также использовать ack-grep (sudo склонный - получают установку ack-grep или посещают http://petdance.com/ack/ ) также если Вы знаете, что только хотите определенный тип файла и хотите проигнорировать вещи в каталогах управления версиями. например, если Вы только хотите текстовые файлы,
ack -l --print0 --text from | xargs -0 -n 1 sed -i -e 's/from/to/g'
# `from` here is an arbitrary commonly occurring keyword
, альтернатива использованию sed должна использовать жемчуг, который может обработать несколько файлов на команду, например,
grep -r -l from . | xargs perl -pi.bak -e 's/from/to/g'
Здесь, жемчугу говорят отредактировать на месте, делая .bak файл сначала.
можно объединить любую из левых сторон канала с правыми сторонами, в зависимости от предпочтения.
comment() {
}
doc() {
}
function agr {
doc 'usage: from=sth to=another agr [ag-args]'
comment -l --files-with-matches
ag -0 -l "$from" "${@}" | pre-files "$from" "$to"
}
pre-files() {
doc 'stdin should be null-separated list of files that need replacement; $1 the string to replace, $2 the replacement.'
comment '-i backs up original input files with the supplied extension (leave empty for no backup; needed for in-place replacement.)(do not put whitespace between -i and its arg.)'
comment '-r, --no-run-if-empty
If the standard input does not contain any nonblanks,
do not run the command. Normally, the command is run
once even if there is no input. This option is a GNU
extension.'
AGR_FROM="$1" AGR_TO="$2" xargs -r0 perl -pi.pbak -e 's/$ENV{AGR_FROM}/$ENV{AGR_TO}/g'
}
можно использовать его как это:
from=str1 to=sth agr path1 path2 ...
Предоставление никакие пути, чтобы заставить его использовать текущий каталог. Обратите внимание, что ag, xargs, и жемчуг должны быть установлены и на ПУТИ.