[SPRING] 스프링 보안 : API 용 JWT 토큰 및 웹용 세션
SPRING스프링 보안 : API 용 JWT 토큰 및 웹용 세션
내 스프링 부트 앱에서 두 보안을 모두 사용하려고합니다. 이미 JWT로 API 측을 수행했지만 웹 측 세션을 구현하는 방법을 모르겠습니다. 이미 다른 프로젝트에서이 작업을 수행했지만 함께 작동시키는 방법을 모르겠습니다.
다음은 내 SecurityConfig입니다.
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().ignoringAntMatchers("/api/**")
.and()
.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.authorizeRequests()
.antMatchers("/api/register").permitAll()
.antMatchers("/api/login").permitAll()
.antMatchers("/api/public").permitAll()
.antMatchers("/api/lost").permitAll()
.antMatchers("/").permitAll()
.antMatchers("/login").permitAll()
.antMatchers("/contact").permitAll()
.antMatchers("/resources/**").permitAll()
.antMatchers("/file/**").permitAll()
.anyRequest().authenticated()
.and()
.apply(new JWTConfigurer(this.tokenProvider));
}
나는 이것을 좋아한다.
@Override
protected void configure(HttpSecurity http) throws Exception {
http
// For API side something like : .match("/api/**")
// No CSRF
.csrf().ignoringAntMatchers("/api/**")
// STATELESS session
// Use token filter
.apply(new JWTConfigurer(this.tokenProvider));
// For WEB side something like : .match "others"
// Use CSRF
.csrf()
// Use session
// And the other permit :
.authorizeRequests()
.antMatchers("/api/register").permitAll()
.antMatchers("/api/login").permitAll()
.antMatchers("/api/public").permitAll()
.antMatchers("/api/lost").permitAll()
.antMatchers("/").permitAll()
.antMatchers("/login").permitAll()
.antMatchers("/contact").permitAll()
.antMatchers("/resources/**").permitAll()
.antMatchers("/file/**").permitAll()
.anyRequest().authenticated();
}
아무도 그렇게하는 법을 말해 줄 수 있습니까? (그리고 어떻게 작동하는지 설명해주십시오). 내가 묻는 것에 대해 좋은 해결책을 찾지 못했습니다.
해결법
-
==============================
1.6 시간 동안 검색 한 후 해결책이 있습니다. https://docs.spring.io/spring-security/site/docs/current/reference/htmlsingle/#multiple-httpsecurity
6 시간 동안 검색 한 후 해결책이 있습니다. https://docs.spring.io/spring-security/site/docs/current/reference/htmlsingle/#multiple-httpsecurity
편집하다 : 여기 내가 어떻게 그랬 :
@EnableWebSecurity public class MultiHttpSecurityConfig { @Autowired private UserDetailsService userDetailsService; @Bean public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(12); } @Configuration @Order(1) public class ApiSecurityAdapter extends WebSecurityConfigurerAdapter { private TokenProvider tokenProvider; public ApiSecurityAdapter(TokenProvider tokenProvider) { this.tokenProvider = tokenProvider; } @Override protected void configure(HttpSecurity http) throws Exception { http.antMatcher("/api/**") //<= Security only available for /api/** .authorizeRequests() .antMatchers("/api/register").permitAll() .antMatchers("/api/login").permitAll() .antMatchers("/api/public").permitAll() .antMatchers("/api/lost").permitAll() .anyRequest().authenticated() .and() .apply(new JWTConfigurer(this.tokenProvider)) .and() .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS); } } @Configuration public class WebSecurityAdapter extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http // <= Security available for others (not /api/) .authorizeRequests() .antMatchers("/admin/**").access("hasRole('ROLE_ADMIN')") .antMatchers("/").permitAll() .antMatchers("/login").permitAll() .antMatchers("/resources/**").permitAll() .anyRequest().authenticated() .and() .formLogin() .loginPage("/login") .usernameParameter("email") .passwordParameter("password") .defaultSuccessUrl("/central", false) .failureForwardUrl("/login/fail") .and() .logout() .invalidateHttpSession(true) .logoutUrl("/logout") .logoutSuccessUrl("/") .and() .csrf(); } } }
희망이 도움이 될 수 있습니다!
from https://stackoverflow.com/questions/44970848/spring-security-jwt-token-for-api-and-session-for-web by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] XML 스키마 네임 스페이스 용 Spring NamespaceHandler를 찾을 수 없음 [http://www.springframework.org/schema/security] (0) | 2019.03.13 |
---|---|
[SPRING] MyBatis RowBounds는 쿼리 결과를 제한하지 않습니다. (0) | 2019.03.13 |
[SPRING] 최대 절전 모드에서 다중 테넌트를 위해 다중 데이터 소스를 구성하는 방법 (0) | 2019.03.13 |
[SPRING] Spring 부트에서 0-legged OAuth 1.0 설정하기 (0) | 2019.03.13 |
[SPRING] 스프링 보안을 사용하여 프로그래밍 방식으로 사용자를 로그 아웃하는 방법 (0) | 2019.03.13 |