2015-11-21 2 views
3

Я пытаюсь защитить свой сервер REST JWT, который я внедрил сам (подразумевая, что в JWT не работает никакой весной, все остальное - Spring).Безопасный REST Api с пружинным ботинком и JWT

У меня этот класс: JWTToken implements Authentication.

У меня есть фильтр, который отвечает установки экземпляра JWTToken на SecurityContextHolder:

public class JwtFilter extends GenericFilterBean { 
public void doFilter(...) { 
    .... 
    JWTToken token = new JWTToken(jwt); // this init the Authentication object with all the jwt claims 
    SecurityContextHolder.getContext().setAuthentication(token); 
    .... 
} 

У меня также есть ресурс для отладки это:

@RequestMapping(
     value = "/protected_resource", 
     method = RequestMethod.POST 
) 
@RolesAllowed("admin") 
public RESTResponse<String> debugJwt() { 
    Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); // here I can see that the context is the right one 
    return new RESTResponse<>("This was successful", "feedback message", true); 
} 

Я отсутствующий один мир из головоломка, которую я не смог найти ни в одном из ресурсов в Интернете, и вот как реализовать WebSecurityConfigurerAdapter и, в частности, configure(HttpSecurity http) меток.

Когда я попытался сделать это, например:

http.authorizeRequests().anyRequest().authenticated() 

просит не пройти через это и ресурс не вызывался.

Что мне здесь не хватает?

ответ

2

Ваш JWTToken класс должен реализовать метод:

Collection<? extends GrantedAuthority> getAuthorities(); 

Реализация должна вернуть коллекцию предоставляется пользовательских ролей, одна из них будет «админ» роль, что-то вроде:

public Collection<? extends GrantedAuthority> getAuthorities() { 
    return Collections.singletonList(new SimpleGrantedAuthority("admin")); 
} 

Конечно, в вашем случае вы будете запрашивать токен DB или JWT и анализировать роли пользователя.

Смежные вопросы