반응형
Spring Security HTTP Basic for RESTFul 및 FormLogin(Cookies) for web - 주석
상세 내용
특정 URL 패턴에 대해서만 HTTP Basic 인증을 원합니다.
상세
어플리케이션용 API 인터페이스를 만들고 있는데 간단한 HTTP 기본 인증으로 인증해야 합니다.단, 다른 웹 페이지는 HTTP basic이 아닌 일반 형식의 로그인을 사용해야 합니다.
현재 구성 - 작동하지 않음
@Override
protected void configure(HttpSecurity http) throws Exception {
http //HTTP Security
.csrf().disable() //Disable CSRF
.authorizeRequests() //Authorize Request Configuration
.antMatchers("/connect/**").permitAll()
.antMatchers("/", "/register").permitAll()
.antMatchers("/admin/**").hasRole("ADMIN")
.antMatchers("/api/**").hasRole("API")
.anyRequest().authenticated()
.and() //HTTP basic Authentication only for API
.antMatcher("/api/**").httpBasic()
.and() //Login Form configuration for all others
.formLogin().loginPage("/login").permitAll()
.and() //Logout Form configuration
.logout().permitAll();
}
이틀을 기다렸는데 아무런 도움도 받지 못했어요.하지만 제 연구는 제게 해결책을 제공해 주었습니다:)
솔루션
@Configuration
@EnableWebMvcSecurity
@EnableGlobalMethodSecurity(securedEnabled = true, prePostEnabled = true, proxyTargetClass = true)
public class WebSecurityConfig extends WebSecurityConfigurerAdapter{
@Autowired
private AuthenticationProvider authenticationProvider;
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth.authenticationProvider(authenticationProvider);
}
@Configuration
@Order(1)
public static class ApiWebSecurityConfig extends WebSecurityConfigurerAdapter{
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable()
.antMatcher("/api/**")
.authorizeRequests()
.anyRequest().hasAnyRole("ADMIN", "API")
.and()
.httpBasic();
}
}
@Configuration
@Order(2)
public static class FormWebSecurityConfig extends WebSecurityConfigurerAdapter{
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring().antMatchers("/css/**", "/js/**", "/img/**", "/lib/**");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable() //HTTP with Disable CSRF
.authorizeRequests() //Authorize Request Configuration
.antMatchers("/connect/**").permitAll()
.antMatchers("/", "/register").permitAll()
.antMatchers("/admin/**").hasRole("ADMIN")
.anyRequest().authenticated()
.and() //Login Form configuration for all others
.formLogin()
.loginPage("/login").permitAll()
.and() //Logout Form configuration
.logout().permitAll();
}
}
}
도움이 될지는 모르겠지만 위의 솔루션을 구현하지 못했습니다.단일 보안을 정의하는 회피책을 찾았습니다.
@설정 클래스
확장
Web Security Configurer 어댑터
httpBasic()과 formLogin()이 모두 설정되어 있습니다.그리고 나서 나는 커스텀을 만들었다.
CustomAuthEntryPoint는 AuthenticationEntryPoint를 구현합니다.
개시 방법에서 다음 논리를 갖는다.
@Override
public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException authException) throws IOException, ServletException
{
String urlContext = UtilityClass.extractUrlContext(request);
if (!urlContext.equals(API_URL_PREFIX))
{
String redirectUrl = "urlOfFormLogin"
response.sendRedirect(request.getContextPath() + redirectUrl);
}
else
{
response.sendError(HttpServletResponse.SC_UNAUTHORIZED);
}
이 문제에 대해 어떤 것이 베스트 프랙티스 전략인지 알 수 없습니다.
언급URL : https://stackoverflow.com/questions/27774742/spring-security-http-basic-for-restful-and-formlogin-cookies-for-web-annotat
반응형
'programing' 카테고리의 다른 글
WooCommerce에서 cart_item_data를 가져오려면 어떻게 해야 합니까? (0) | 2023.02.22 |
---|---|
재료 설계 라이트(Right)JS (0) | 2023.02.22 |
장고에서는 에러:데이터를 덤프할 때 데이터베이스를 직렬화할 수 없습니다. (0) | 2023.02.22 |
Create React App에서 API 키를 숨기려면 어떻게 해야 하나요? (0) | 2023.02.22 |
angular에서 module.config(configFn)에 의존관계를 주입하는 방법 (0) | 2023.02.22 |