使用.ignoring()的Spring WebSecurity配置不起作用

时间:2018-03-05 08:22:41

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

我已经为此奋斗了几天。除了通过简单地评论一些代码,运行程序,然后取消注释并再次运行似乎不一致和不可预测地发生的古怪事物,我无法理解覆盖各种配置方法是如何工作的。

我希望WebSecurity始终忽略“/ static / **”。

启动应用程序并导航到主页后,我可以访问我允许的所有页面,但“/ static / **”中的所有内容都被忽略,直到我导航到登录页面并以经过身份验证的用户身份登录。因此,应用程序只显示为带有文本的白页,在登录之前根本没有任何样式。

以下是我的AppSecurityConfig类的代码。我省略了用于处理登录成功和失败的帮助方法,并且我还必须使用不同角色的不同帐户类型,因此我在此处仅包含一个帐户以简化。我认为存在问题的部分是在configure(WebSecurity web)方法中,我调用.ignoring()方法并传递“/ static / **”arg。提前谢谢你:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Autowired
    private CompanyService companyService;

    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(companyService);
    }

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

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .antMatchers("/",
                        "/account_registration",
                        "/candidate_registration",
                        "/addCandidate",
                        "/company_registration",
                        "/addCompany",
                        "/select_account_type",
                        "/candidate_login",
                        "/company_login").permitAll()
                .antMatchers("/company_profile").hasRole("COMPANY")
                .anyRequest().authenticated()
                .and()
            .formLogin()
                .loginPage("/company_login")
                .permitAll()
                .successHandler(companyLoginSuccessHandler())
                .failureHandler(companyLoginFailureHandler())
                .and()
            .logout()
                .logoutSuccessUrl("/");

    }
}

1 个答案:

答案 0 :(得分:0)

我的静态文件夹的路径是“src / main / resources / static”,但我做了Sam所说的并打开了开发人员工具,并意识到“静态”目录中的所有内容都是直接引用的。例如,有以这种方式引用的目录:“/ vendor / ...”和“/ images / ...”,它们被引用但由于安全性而被忽略。 “静态”目录中还有一些文件,如“app.css”,“app.js”和“favicon.png”,它们有一些奇怪的行为。它们似乎没有被忽略,但是显示了不同的颜色和样式,除非我还将它们作为参数添加到.gitIgnoring()方法,如“/app.css”等。这个项目是通过TeamTreehouse教程和然后在我的6人团队中的几个人之间重构和添加自定义样式,我很确定在这个项目中继承了很多东西,我自己和前端人员在样式方面都不理解。

似乎有效的修复,虽然可能不太理想,但是从.ignoring()方法中删除“/ static / **”并将其替换为实际位于“static /”目录中的所有内容:

@Override
public void configure(WebSecurity web) throws Exception {
    web.ignoring().antMatchers( "/images/**",
        "/vendor/**",
        "/app.css",
        "/app.js",
        "/favicon.png");
}