Возможность авторизации запросов в spring и access_token-ом и через форму входа в браузере

249
09 апреля 2018, 02:20

Дано:

Проект на 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 (эти данные также пишутся в БД при старте сервера)

READ ALSO
Чтение из файла Java

Чтение из файла Java

Подскажите как лучше сделатьВ файле сплошным текстом идет строка примерно 35 млн символов, как ее лучше считать в тип String

184
Если хеш-функция для строк исключает возможность коллизии, то набор хеш-кодов {1101, 115, 1103} может быть сгенерирован для строкового массива

Если хеш-функция для строк исключает возможность коллизии, то набор хеш-кодов {1101, 115, 1103} может быть сгенерирован для строкового массива

Если хеш-функция для строк исключает возможность коллизии, то набор хеш-кодов {1101, 115, 1103} может быть сгенерирован для строкового массива

302
Java swing, перерисовка изображния

Java swing, перерисовка изображния

Пишу графический редактор, однако возникла следующая проблемаПри изменении размеров окна содержимое Jpanel перерисовывается, в результате...

217
Слетает Path для Java при перезапуске ПК на Windows 10

Слетает Path для Java при перезапуске ПК на Windows 10

Java Path настроен и всё работает,но при перезапуске ПК слетает,пример: включаю ПК,и при попытке скомпилировать/запустить программу/узнать версию...

205