【问题标题】:Spring Security cannot Access External JavaScriptSpring Security 无法访问外部 JavaScript
【发布时间】:2020-05-05 05:09:43
【问题描述】:

我正在使用 Spring Security,当我尝试使用外部 javascript 甚至 webjars 时,安全性会阻止访问。

我尝试向我的网页添加一些 javascript,如下所示: header.html

<script src="https://cdnjs.cloudflare.com/ajax/libs/sockjs-client/1.4.0/sockjs.min.js"></script>
<script src="/webjars/stomp-websocket/stomp.min.js"></script>

我的安全配置如下所示(注意“/webjars/”、“/*.js”、“/.js”).permitAll()):

AppConfig.java

@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class AppConfig extends WebSecurityConfigurerAdapter {

@Bean
public LogoutSuccessHandler logoutSuccessHandler() {
    return new LogoutController();
}

@Bean
public AuthenticationController authenticationController() throws UnsupportedEncodingException {
    JwkProvider jwkProvider = new JwkProviderBuilder(domain).build();
    return AuthenticationController.newBuilder(domain, clientId, clientSecret)
            .withJwkProvider(jwkProvider)
            .build();
}

@Override
protected void configure(HttpSecurity http) throws Exception {
    http.csrf().disable();
    http
        .authorizeRequests()
        .antMatchers("/callback", "/login", "/", "/*.png", "/css/**", "/js/**", "/bibliographies", "/bibliographies/*", "/api/**", "/webjars/**", "/*.js", "/**.js").permitAll()
        .anyRequest().authenticated()
        .and()
        .logout().logoutSuccessHandler(logoutSuccessHandler()).permitAll();
}

在加载我想要访问 javascript 的网页时,我得到以下异常:

2020-01-18 16:38:39.941 调试 7824 --- [nio-3000-exec-4] o.s.s.w.a.ExceptionTranslationFilter :访问被拒绝(用户是 匿名的);重定向到身份验证入口点

org.springframework.security.access.AccessDeniedException: 访问是 被拒绝 org.springframework.security.access.vote.AffirmativeBased.decide(AffirmativeBased.java:84) ~[spring-security-core-4.2.12.RELEASE.jar:4.2.12.RELEASE] 在 org.springframework.security.access.intercept.AbstractSecurityInterceptor.beforeInvocation(AbstractSecurityInterceptor.java:233) ~[spring-security-core-4.2.12.RELEASE.jar:4.2.12.RELEASE] 在 org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:124) ~[spring-security-web-4.2.12.RELEASE.jar:4.2.12.RELEASE] 在 org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:91) ~[spring-security-web-4.2.12.RELEASE.jar:4.2.12.RELEASE] 在 org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) [spring-security-web-4.2.12.RELEASE.jar:4.2.12.RELEASE] 在 org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:114) ~[spring-security-web-4.2.12.RELEASE.jar:4.2.12.RELEASE] 在 org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) [spring-security-web-4.2.12.RELEASE.jar:4.2.12.RELEASE] 在 org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:137) [spring-security-web-4.2.12.RELEASE.jar:4.2.12.RELEASE] 在 org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) [spring-security-web-4.2.12.RELEASE.jar:4.2.12.RELEASE]

我声明的其他匹配器(例如“/api/**”)无需登录即可使用,但是我自己的安全性阻止我访问 .js 文件,即使我的匹配器看起来没问题.

我该如何解决这个问题?

【问题讨论】:

  • 您可以使用现有的 Spring Security 配置在资源下保留 js 文件的本地副本。
  • 你能更新你的 pom.xml 包含 js 依赖吗?
  • 不认为 js 文件是问题所在,您是否尝试将它们排除在外?

标签: java spring spring-boot spring-mvc spring-security


【解决方案1】:

添加:

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

在您的上下文文件中。这里的resources是所有JS文件所在的目录。

你可以参考这个链接: Spring security does not allow CSS or JS resources to be loaded

【讨论】:

    猜你喜欢
    • 2012-02-28
    • 2014-10-02
    • 2021-06-06
    • 2018-07-22
    • 2016-11-06
    • 1970-01-01
    • 2014-09-30
    • 2013-09-14
    • 2012-11-07
    相关资源
    最近更新 更多