在 Spring Security 登录后,我被重定向到 CSS/JS 资源而不是 HTML 页面
Posted
技术标签:
【中文标题】在 Spring Security 登录后,我被重定向到 CSS/JS 资源而不是 HTML 页面【英文标题】:After Spring Security login, I'm redirected to a CSS/JS resource instead of a HTML page 【发布时间】:2015-06-07 19:49:57 【问题描述】:我有一个带有 spring-security 和 PrimeFaces 的项目,但在执行项目时出现错误。
这个网址总是出现/javax.faces.resource/primefaces.js.xhtml?ln=primefaces&v=5.1
当我覆盖这个方法时会发生这种情况:
@Override
protected void configure(HttpSecurity http) throws Exception
http.csrf().disable();
http.authorizeRequests()
.anyRequest().authenticated()
.and()
.formLogin().loginPage("/login.xhtml")
.permitAll();
并放置我自己的登录页面。 但是我的 web.xml 调用页面 home.xhtml
<welcome-file-list>
<welcome-file>home.xhtml</welcome-file>
</welcome-file-list>
显示的是this:
【问题讨论】:
错误是...? 错误是所有 css /javax.faces.resource/primefaces.js.xhtml?ln=primefaces&v=5.1 的页面显示而不是我的 home.xhtml 转到home.xhtml
会发生什么?
如果我手动转到 home.xhtml 页面可以正常工作。但错误是在单击登录按钮后,然后自动使用 javascript 和 css
【参考方案1】:
默认情况下,登录将重定向到当前 HTTP 会话的最后请求的受限资源。显然,您(不知不觉地)也将 JSF 生成的 HTML 页面的 JS/CSS/图像资源作为受限资源。当登录页面本身准确引用该 JavaScript 文件时,它将被记住为上次请求的受限资源,然后 Spring Security 将在成功登录后盲目地重定向到它。
您需要告诉 Spring Security 将它们从受限资源中排除。一种方法是将以下行添加到 Spring Security XML 配置文件中。
<intercept-url pattern="/javax.faces.resource/**" filters="none"/>
另一种方法是覆盖SecurityConfig#configure(WebSecurity)
。
@Override
public void configure(WebSecurity web) throws Exception
web.ignoring().antMatchers("/javax.faces.resource/**");
这也应该立即解决登录页面本身上所有损坏的 CSS/JS/图像(在加载登录页面时,您应该通过检查浏览器的内置 HTTP 流量监视器和/或 JS 控制台注意到这一点)。
【讨论】:
我如何使用注释来做到这一点?因为我没有这个spring-xml配置文件。 我还发现订单很重要。您需要 antMatcher 允许访问这些资源成为配置中的第一个。 这应该是公认的答案。但是,是否也可以限制对 Javascript 资源的访问(出于安全原因),但要避免这种重定向? 非常感谢。这对我很有帮助。我覆盖了 SecurityConfig#configure(WebSecurity) 并添加了 "/css/**","/js/**" @BalusC 您提到了default redirect to the last requested restricted resource of the current HTTP session
- 如何停止这种情况,以便在成功登录后,用户将被重定向到 spring 安全配置中配置的页面。以上是关于在 Spring Security 登录后,我被重定向到 CSS/JS 资源而不是 HTML 页面的主要内容,如果未能解决你的问题,请参考以下文章
使用 Spring Security 成功登录后如何正确更新登录日期时间?
使用 Spring Security 成功登录后如何正确更新登录日期时间?
Grails Spring Security 和 CAS 问题
Spring Security - 用户身份验证有时会失败并且用户被重定向到登录页面