настройка перехватчиков для выполнения «предварительных задач» при попадании на конечные точки в веб-приложении на основе Spring - PullRequest
0 голосов
/ 11 января 2019

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

Рассмотрим ситуацию, когда мне необходимо установить значение key=value в базе данных, отправив запрос POST в базу данных, когда пользователь нажимает на следующие конечные точки.

/endpoint1 /endpoint2 /endpoint3 /endpoint4

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

Как этого достичь, используя перехватчик в среде защиты пружины?

1 Ответ

0 голосов
/ 11 января 2019

Spring Security предназначен для средств безопасности, связанных с аутентификацией и авторизацией. Вы можете инициировать какое-либо действие, если кто-то вошел в систему, но если вам просто нужно инициировать действие для каждого запроса, то Spring Security не является подходящим местом для этого (согласно бизнес-логике), лучше добавить только фильтр . В любом случае, отвечая на ваш вопрос:

Лучший способ - добавить собственный фильтр в цепочку фильтров Spring Security: Вы должны перезаписать:

@Configuration
public class CustomWebSecurityConfigurerAdapter
  extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.addFilterAfter(
          new CustomFilter(), BasicAuthenticationFilter.class);
    }
} 

и создайте свой собственный фильтр:

public class CustomFilter extends GenericFilterBean {

    @Override
    public void doFilter(
      ServletRequest request, 
      ServletResponse response,
      FilterChain chain) throws IOException, ServletException {
        //your logic here
        chain.doFilter(request, response); //it's needed to pass your request father
    }
}

Код взят из baeldung.com для получения дополнительной информации

...