programing

스프링 보안에서 CSS 또는 JS 리소스를 로드할 수 없음

newsource 2023. 10. 2. 15:04

스프링 보안에서 CSS 또는 JS 리소스를 로드할 수 없음

리소스는 src/main/resource/static/css 또는 src/main/resources/static/js 아래에 있으며 spring boot을 사용하고 있으며 보안 등급은 다음과 같습니다.

@Configuration
@EnableWebMvcSecurity
@EnableGlobalAuthentication
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
//      http.authorizeRequests().antMatchers("/", "/index", "/quizStart")
//              .permitAll().anyRequest().authenticated();
//      http.formLogin().loginPage("/login").permitAll().and().logout()
//              .permitAll();
    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth)
            throws Exception {
        auth.inMemoryAuthentication().withUser("test").password("test")
                .roles("USER");
    }
}

브라우저에서 "/index"에 액세스하면 잘 작동하지만(리소스를 로드할 수 있음) 클래스의 네 줄에 대한 설명을 해제하면 리소스를 로드할 수 없습니다. 네 줄은 다음을 의미합니다.

    http.authorizeRequests().antMatchers("/", "/index", "/quizStart")
            .permitAll().anyRequest().authenticated();
    http.formLogin().loginPage("/login").permitAll().and().logout()
            .permitAll();

누가 이것을 도와줄 수 있습니까?미리 감사드립니다.

해당 항목이 들어 있는 디렉토리를 permitAll로 설정해야 합니다.

여기 제 봄 보안 컨텍스트 파일에서 발췌한 내용이 있습니다.자원 디렉토리 아래에는 js, css, 이미지 폴더가 있으며 이 줄로 권한이 주어집니다.

<security:intercept-url pattern="/resources/**" access="permitAll" />

어떤 이유에서인지, 이것은 저에게 효과가 없었습니다.

http.authorizeRequests().antMatchers("/resources/**").permitAll();

다음 사항을 추가해야 했습니다.

http.authorizeRequests().antMatchers("/resources/**").permitAll().anyRequest().permitAll();

또한 이 줄은 액세스를 리스트릭하는 코드 뒤에 있어야 합니다.

다음을 추가합니다.

@Override
    public void configure(WebSecurity web) throws Exception {
        web.ignoring().antMatchers("/resources/**").anyRequest();
    }

특정 파일의 경우 "/*.js" 또는 디렉토리의 경우 "/resources/**"와 같이 직접 사용할 수도 있습니다.

 http.authorizeRequests()
                .antMatchers("/", "/login", "/logout", "/error").permitAll()
                .antMatchers("/resources/**").permitAll()
                .antMatchers("/*.js").permitAll()
                .antMatchers("/api/**").authenticated()

저도 같은 문제가 있었는데요.permitAll()해결책이 제게 효과가 없었습니다.다음 사항을 추가했습니다.@Override나에게 방법WebSecurityConfig학급.

@Override
public void configure(WebSecurity web) throws Exception {
    web
            .ignoring()
            .antMatchers("/resources/**", "/static/**", "/css/**", "/js/**", "/img/**", "/icon/**");
}

행운을 빕니다.

저도 같은 문제가 있었는데 "permitAll"로 접속을 변경하는 것은 도움이 되지 않았습니다.보안을 "none"으로 설정하고 인증 없이 css와 js 파일을 다운로드할 수 있는 새로운 http 패턴을 만들었습니다.

<http pattern="/resources/**" security="none" />

드디어 효과가 있었어요./home(로그인 페이지가 표시됨) 및 오류 메시지는 인증할 필요가 없습니다.모든 리소스가 permitAll이고 /main url이 인증됩니다.기타 URL(예: /users/customers 등))을 인증됨() 그대로 추가해야 합니다.

  <security:intercept-url pattern="/home" access="isAnonymous()"/>
  <security:intercept-url pattern="/error*" access="isAnonymous()"/>      
  <security:intercept-url pattern="/main" access="isAuthenticated()"/>
  <security:intercept-url pattern="/css/**" access="permitAll" />     
  <security:intercept-url pattern="/js/**" access="permitAll" />
  <security:intercept-url pattern="/fonts/**" access="permitAll" />
  <security:intercept-url pattern="/images/**" access="permitAll" />

.antMatchers("/.js", "/.css").permitAll()

언급URL : https://stackoverflow.com/questions/25368535/spring-security-does-not-allow-css-or-js-resources-to-be-loaded