在 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 - 用户身份验证有时会失败并且用户被重定向到登录页面

授权后返回上一页,Spring Security AuthenticationSuccessHundler

通过 JSF 表单成功登录后 Spring Security 不会重定向到登录页面