【发布时间】: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