Как перехватить токен доступа в приложении Spring mvc? - PullRequest
0 голосов
/ 07 июля 2019

Я хотел бы перехватывать токен доступа для всех запросов в моем веб-приложении Spring MVC после проверки подлинности пользователя с использованием единого входа из поставщика OAuth2. Код моего демо-приложения в данный момент выглядит следующим образом:

application.yml:

security:
  oauth2:
    client:
      clientId: metlife_monitor
      clientSecret: password
      accessTokenUri: http://localhost:8668/sso-server/oauth/token
      userAuthorizationUri: http://localhost:8668/sso-server/oauth/authorize
      tokenName: oauth_token
    resource:
      userInfoUri: http://localhost:8688/api/me

SpringBoot Application.java:

@SpringBootApplication
@EnableOAuth2Sso
@EnableJdbcHttpSession
public class App1Application  extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .antMatcher("/**")
                .authorizeRequests()
                .antMatchers("/", "/login**", "/login2**", "/error**", "/webjars/**").permitAll()
                .anyRequest().authenticated()
                .and().logout()
                .logoutUrl("/logout")
                .logoutSuccessUrl("http://localhost:8668/sso-server/logout")
                .invalidateHttpSession(true)
                .deleteCookies("client-session", "JSESSIONID")
                .permitAll()
                .and().csrf().disable()
        ;

    }
    public static void main(String[] args) {
        SpringApplication.run(App1Application.class, args);
    }

}

DashboardController.java:

@Controller
public class DashboardController {
    @GetMapping("/")
    public ModelAndView home() {
        ModelAndView modelAndView = new ModelAndView("index");
        return modelAndView;
    }

    @GetMapping("/protected")
    public ModelAndView protectedView() {
        ModelAndView modelAndView = new ModelAndView("protected");
        return modelAndView;
    }
}

1 Ответ

0 голосов
/ 07 июля 2019

Зарегистрируйте OncePerRequestFilter, затем по методу doFilterInternal извлеките токен из запроса.

@Component
public class TokenInterceptorFilter extends OncePerRequestFilter {

  @Autowired
  private AuthenticationStorage storage;

  @Override
  protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response,
          FilterChain filterChain) throws ServletException, IOException {

    // Extract the token from the request

    filterChain.doFilter(request, response);
  }

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