Дано:
Проект на spring
+kotlin
. Реализовано получение access_token
через БД и доступ к ресурсам с его помощью.
Задача:
Реализовать возможность доступа к ресурсам для юзеров, залогинившихся через форму логина в браузере.
Проблема:
Работает только один из способов авторизации. Если добавить аннотацию @EnableResourceServer
- работает способ доступа с токеном. При запросе любой страницы в браузере просто выводит ошибку "неавторизован", в т.ч. по адресу /login
. Если на /login
зайти с прикреплением токена - выведет 404
. Если аннотацию @EnableResourceServer
убрать - работает доступ через форму логина в браузере и получение токена, но все запросы с прикреплением токена перенаправляют на /login
, т.е. токен не воспринимается.
Вопрос:
Как же сделать так, чтобы работало?
По идее надо написать что-то тут, но часы гугленья не дали понимания что именно:
@Configuration
@EnableWebSecurity
@EnableResourceServer
@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true)
class WebSecurityConfiguration : WebSecurityConfigurerAdapter() {
@Bean
fun passwordEncoder() = BCryptPasswordEncoder()
@Bean
fun authenticationProvider(): DaoAuthenticationProvider {
val authenticationProvider = DaoAuthenticationProvider()
authenticationProvider.setUserDetailsService(userDetailsService)
authenticationProvider.setPasswordEncoder(passwordEncoder())
return authenticationProvider
}
@Bean
override fun authenticationManagerBean(): AuthenticationManager {
return super.authenticationManagerBean()
}
@Autowired
lateinit var userDetailsService: UserServiceImpl
@Autowired
fun configureGlobal(auth: AuthenticationManagerBuilder) {
auth
.userDetailsService(userDetailsService)
.passwordEncoder(passwordEncoder())
.and()
.authenticationProvider(authenticationProvider())
}
override fun configure(http: HttpSecurity) {
http
.csrf().disable()
http
.authorizeRequests()
.anyRequest()
.authenticated()
.and()
.formLogin().permitAll()
}
}
Дополнительная информация:
Ссылка на весь проект на GitHub
: https://github.com/mohaxspb/springSecurityExample/tree/v0.0.1
Для запуска и работы надо поставить postgresql
и создать там под юзером postgres
с паролем testtest
БД с именем springbootdb
- далее при запуске в БД создана будет таблица с юзерами и туда будет добавлен юзер, под коим можно логиниться с логином test@test.ru
и паролем password
. Для получения токена надо указать client_id: client_id
и client_secret: client_secret
(эти данные также пишутся в БД при старте сервера)
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Подскажите как лучше сделатьВ файле сплошным текстом идет строка примерно 35 млн символов, как ее лучше считать в тип String
Если хеш-функция для строк исключает возможность коллизии, то набор хеш-кодов {1101, 115, 1103} может быть сгенерирован для строкового массива
Пишу графический редактор, однако возникла следующая проблемаПри изменении размеров окна содержимое Jpanel перерисовывается, в результате...
Java Path настроен и всё работает,но при перезапуске ПК слетает,пример: включаю ПК,и при попытке скомпилировать/запустить программу/узнать версию...