Чтобы добавить пользовательские атрибуты, вам нужно сделать три вещи:
Первый объясняется здесь довольно хорошо: http://www.keycloak.org/docs/3.3/server_admin/topics/users/attributes.html
Добавить сопоставление претензий:
Требования к доступу:
final Principal userPrincipal = httpRequest.getUserPrincipal();
if (userPrincipal instanceof KeycloakPrincipal) {
KeycloakPrincipal kp = (KeycloakPrincipal) userPrincipal;
IDToken token = kp.getKeycloakSecurityContext().getIdToken();
Map otherClaims = token.getOtherClaims();
if (otherClaims.containsKey("YOUR_CLAIM_KEY")) {
yourClaim = String.valueOf(otherClaims.get("YOUR_CLAIM_KEY"));
}
} else {
throw new RuntimeException(...);
}
Надеемся, что это поможет и подходит вашему прецеденту. Я использовал это для пользовательского атрибута, который я добавил с помощью специальной темы.
Благодаря всем, кто ответил, но я нашел свое предпочтительное решение.
, Когда Вы говорите SQL Server ROWTERMINATOR = '\n', он интерпретирует это как значение разделителя строк по умолчанию в соответствии с Windows, который является на самом деле "\r\n" (использующий нотацию C/C++). Если Ваш разделитель строк действительно просто "\n", необходимо будет использовать динамический SQL, показанный ниже.
DECLARE @bulk_cmd varchar(1000)
SET @bulk_cmd = 'BULK INSERT table_name
FROM ''C:\file.csv''
WITH (FIELDTERMINATOR = '','', ROWTERMINATOR = '''+CHAR(10)+''')'
EXEC (@bulk_cmd)
, Почему Вы не можете сказать BULK INSERT... (ROWTERMINATOR = CHAR (10)), вне меня. Не похоже, что можно оценить любые выражения в разделе WITH команды.
то, Что делает вышеупомянутое, создают строку команды и выполняют это. Аккуратно обходя потребность создать дополнительный файл или пройти дополнительные шаги.
Одна опция состояла бы в том, чтобы использовать bcp и настроить файл управления с '\n'
как символ разрыва строки.
, Хотя Вы указали, что предпочли бы не, другая опция будет состоять в том, чтобы использовать unix2dos, чтобы предварительно обработать файл в один с '\r\n'
разрывы строки.
Наконец, можно использовать FORMATFILE
опция на BULK INSERT
. Это будет использовать файл управления BCP для определения формата импорта.
Я думал бы, что "ROWTERMINATOR = '\n'" будет работать. Я предложил бы открыть файл в инструменте, который показывает "скрытые символы", чтобы удостовериться, что строка завершается как Вы, думают. Я использую блокнот ++ для вещей как это.
Это сводится к этому. Unix использует LF (ctrl-J), MS-DOS/Windows использует CR/LF (ctrl-M/Ctrl-J).
при использовании '\n' на Unix он переводится в символ LF. На MS-DOS/Windows это переводится в CR/LF. То, когда Ваш импорт работает на Unix, отформатировало файл, он видит только LF. Следовательно, его часто легче петлять через unix2dos сначала. Но поскольку Вы сказали в Вас исходный вопрос, Вы не хотите делать это (я предположу, что существует серьезное основание, почему Вы не можете).
, Почему не может Вы делать:
(ROWTERMINATOR = CHAR(10))
, Вероятно, потому что, когда код SQL анализируется, это не заменяет символ (10) символом LF (потому что это уже вмонтировано в корпус в одинарных кавычках). Или возможно то, что это было интерпретируемым как:
(ROWTERMINATOR =
)
, Что происходит, когда Вы повторяете содержание @bulk_cmd?
Смотрит на меня существует два общих проспекта, которые могут быть взяты: некоторый альтернативный способ считать CSV в сценарии SQL или преобразовать CSV заранее с любым из многочисленных способов, которыми можно сделать это (BCP, unix2dos, если это - бывший король вещи, можно, вероятно, даже использовать редактор кода для фиксации файла для Вас).
, Но у Вас должен будет быть дополнительный шаг!
, Если этот SQL запускается из программы, Вы могли бы хотеть преобразовать окончания строки в той программе. В этом случае и Вы решаете кодировать преобразование сами, вот то, что необходимо не упустить: 1. Окончание строки могло бы быть \n 2. или \r\n 3. или даже \r (Mac!) 4. хорошее горе, могло случиться так, что некоторые строки имеют \r\n и других \n, любая комбинация возможна, если Вы не управляете, куда CSV прибыл от
хорошо, хорошо. Возможность 4 неправдоподобна. Это происходит в электронном письме, но это - другая история.
Это немного сложнее! Когда вы указываете SQL Server ROWTERMINATOR = '\ n', он интерпретирует это как означающий терминатор строки по умолчанию в Windows, который на самом деле является «\ r \ n» (с использованием нотации C / C ++). Если ваш терминатор строки действительно просто "\ n", вам придется использовать динамический SQL, показанный выше. Я только что потратил большую часть часа, выясняя, почему \ n на самом деле не означает \ n при использовании с BULK INSERT!