【问题标题】:Spring Security Not doing it's jobSpring Security 没有做好它的工作
【发布时间】:2018-10-06 23:54:00
【问题描述】:

Atm 我有个问题,登录页面基本上什么都不做,因为如果你插入一个页面的 url,你可以跳过登录。

我正在使用这个

 @Override
protected void configure(HttpSecurity http) throws Exception {
    http.authorizeRequests().antMatchers("/").hasAnyRole("Administrator" , "Member")
            //.anyRequest().authenticated()
            .and()
            .formLogin().permitAll()
                .loginPage("/login").permitAll()
                .defaultSuccessUrl("/dashboard")
                .failureUrl("/login?error")
                .successHandler(authenticationSuccessHandler)
            .and()
            .logout()
                .logoutUrl("/logout")
                .logoutSuccessUrl("/login")
                .logoutSuccessHandler(logoutSuccessHandler)
            .and()
            .csrf().disable();
}

请注意,//.anyRequest().authenticated() 已被注释。此行似乎保护我的网站无法通过 URL 访问,它正在重定向到登录页面。

但如果我有它,我在我的页面中看不到 css,我得到了

拒绝应用来自“http://localhost:8080/login”的样式,因为它 MIME 类型 ('text/html') 不是受支持的样式表 MIME 类型,并且 已启用严格的 MIME 检查。

如何保护我的网站不知道 URL,但同时在登录页面中看到 CSS?

【问题讨论】:

  • 今天我已经使用了所有的标志,但这可能会有所帮助:stackoverflow.com/questions/25368535
  • 尝试自动登录和css资源http.authorizeRequests().antMatchers("/css/**").permitAll() .antMatchers("/login").permitAll() .antMatchers("/").hasAnyRole("Administrator" , "Member") .anyRequest().authenticated() .and().formLogin().permitAll().loginPage("/login").permitAll() .defaultSuccessUrl("/dashboard") .failureUrl("/login?error") .successHandler(authenticationSuccessHandler) .and().logout() .logoutUrl("/logout").logoutSuccessUrl("/login").logoutSuccessHandler(logoutSuccessHandler).and().csrf().disable();
  • @BooBerr'ita 同样的错误。没有 CSS

标签: java spring spring-security


【解决方案1】:

取消anyRequest.authenticated 然后你必须授权访问你的静态资源。

antMatcher("/css/**").permitAll()

对 javascript 和其他静态资源执行相同的操作。

完整配置:

   http.authorizeRequests().antMatchers("/").hasAnyRole("Administrator" , "Member")
    .anyRequest().authenticated()
    .and()
    .authorizeRequests()
        .antMatchers("/css/**").permitAll()
    .and()
    .formLogin().permitAll()
        .loginPage("/login").permitAll()
        .defaultSuccessUrl("/dashboard")
        .failureUrl("/login?error")
        .successHandler(authenticationSuccessHandler)
    .and()
    .logout()
        .logoutUrl("/logout")
        .logoutSuccessUrl("/login")
        .logoutSuccessHandler(logoutSuccessHandler)
    .and()
    .csrf().disable();

【讨论】:

  • 我更新了我的答案。我现在无法测试我的代码,但我 100% 确定这些方法存在。
  • 大声笑....antMatchers("/css/**").permitAll().anyRequest().permitAll() 似乎正在工作 xD。 nvm...现在我可以通过 url 跳过登录
【解决方案2】:

除了您描述的配置之外,我通常会配置我的资源的访问权限以覆盖另一个配置:

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

对我来说似乎更有条理。您可以将其添加到您的 Spring 配置类中,并通过您的 css 更改“资源”。我通常更喜欢打开“资源”并将我的 css 放入其中(在子目录中),因为它适用于各种资源,如图像、css 等。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-23
    • 1970-01-01
    • 2020-02-08
    • 2013-10-10
    • 2017-08-26
    • 1970-01-01
    • 1970-01-01
    • 2015-10-16
    相关资源
    最近更新 更多