Как извлечь запрос graphQL в файле Spring WebSecurityConfig? - PullRequest
0 голосов
/ 09 декабря 2018

Я настраиваю WebSecurityConfig для конечных точек, принадлежащих конечным точкам GraphQl.

Это мой код:

@Configuration
@EnableWebSecurity
class WebSecurityConfig : WebSecurityConfigurerAdapter() {



override fun configure(http: HttpSecurity) {
    http
            .httpBasic()
            .and()
            .authorizeRequests()

            .antMatchers("/users?{query}")
            /*
                the "#" resolves the variable in the path, "{id}" in this case.
                the "@" resolves a current bean.
              */
            .access("hasRole('USER') and @userSecurity.checkId(authentication, #query)")
            .antMatchers("/**").hasRole("ADMIN")

            .anyRequest().denyAll()
            .and()
            .csrf().disable()
            .sessionManagement()
            .sessionCreationPolicy(SessionCreationPolicy.NEVER)
}

@Bean
fun userSecurity() : UserSecurity {
    return UserSecurity()
}
}


/**
 * Custom check. Not only we need a user authenticated, but we also
 * need to make sure that a user can only access his/her data, and not the
 * one of the other users
 */

class UserSecurity{

@Autowired
private lateinit var userRepository: UserRepository

fun checkId(authentication: Authentication, query: String) : Boolean{
    val current = (authentication.principal as UserDetails).username

    print("\n\n\n")
    println(query)
    return try {
        userRepository.findById(current).get().username == current
    } catch (e : Exception){
        false
    }
}
}

Что я пытаюсь сделать, это извлечь запрос GraphQL из URL,и используйте это для проверки правильности запроса.

F.eks.если JonhDoe пытается сделать запрос на данные других пользователей.Мы хотим проверить, совпадает ли пользователь в запросе с пользователем, аутентифицированным при весенней загрузке, и затем разрешить или нет запрос.

Я использую redis в архитектуре микросервиса

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...