programing

Spring Security HTTP Basic for RESTFul 및 FormLogin(Cookies) for web - 주석

goodsources 2023. 2. 22. 21:50
반응형

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

반응형