2017-02-21 2 views
3

Я пытаюсь создать независимую пакетную банку с пользовательской аннотацией, которая при включении в функцию сопоставления контроллера (и взятие userToken как входной сигнал в заголовке) возвращает логическое значение, является ли пользователь аутентифицируется или сейчас.Создайте пользовательскую аннотацию для проверки userToken из заголовка

// Expected way of inclusion 
public @ResponseBody boolean isAuthenticated(@Authenticator(@RequestHeader("userToken")) Boolean isUserAuthenticated) { 
return isUserAuthenticated; 
} 

Я знаю, что это не будет правильный синтаксис, так как с помощью этого кода выдает ошибку, что RequestMapping не может быть преобразован в строку (и аннотации только принимать примитивные значения).

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

Важная информация: Обратите внимание: @ Аутентификатор поставляется из независимого пакета, импортированного в текущий пакет через Maven. Будет ли HTTPServletRequest проходить в ConstraintValidator.

+1

Я думаю, что вы вы пытаетесь переписать Spring Security. –

+0

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

+0

Я добавил ответ. –

ответ

0

Используйте BasicAuthenticationFilter пружины безопасности:

public class MyBasicAuthenticationFilter extends BasicAuthenticationFilter { 

    private AuthenticationManager authenticationManager; 

    public MyBasicAuthenticationFilter(AuthenticationManager authenticationManager) { 
     super(authenticationManager); 
     this.authenticationManager=authenticationManager; 
    } 

    @Override 
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException { 
     // do you checks here 
     super.doFilterInternal(request, response, chain); 
    } 
} 

Затем добавить к вашей конфигурации безопасности что-то вроде:

@Configuration 
@EnableWebSecurity 
public class WebSecurityConfig extends WebSecurityConfigurerAdapter { 

    @Override 
    protected void configure(HttpSecurity http) throws Exception { 
     http 
       .authorizeRequests() 
       .antMatchers("/", "/home").permitAll() 
       .anyRequest().authenticated() 
       .and() 
       .formLogin() 
       .loginPage("/login") 
       .permitAll() 
       .and() 
       .logout() 
       .permitAll(); 

     http.addFilterBefore(new MyBasicAuthenticationFilter(authenticationManager()); 
    } 

    @Bean 
    public AuthenticationManager authenticationManager() { 
     return new MyAuthenticationManager(); 
    } 
+0

Спасибо за помощь, но это то, что мне нужно. Обратите внимание, что мой пакет будет включен в другие проекты, и в аннотации следует просто принять userToken и проверить его, а также выбросить ошибку, если есть проблемы. –

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