使用安全性正确配置Spring - Java

时间:2015-12-16 02:55:27

标签: java html spring security spring-mvc

所以我是Spring的新手,并在使用Spring-Boot开发网络应用程序时学习。 目前,我的网页包含两个html页:index.htmllogin.html。我也使用Spring-Security

这是我当前的MvcConfig

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

@Configuration
public class MvcConfig extends WebMvcConfigurerAdapter {

    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/").setViewName("index");
        registry.addViewController("/login").setViewName("login");
    }

}

网站的设计方式,用户转到网址http://localhost:8080,然后他/她会看到初始页面,其中有login个标签,他/她可以在那里登录,然后转到dashboard视图(我稍后会添加)。 但是,当我加载初始时,页面完全错误配置(css / js / images资源没有被加载)。在我转到http://localhost:8080/login后,执行登录,一切都恢复正常。

因此,任何形式为http://localhost:8080的网址都是允许的(index.html),但其他任何网址都需要登录。 这是我的Spring-Security配置:

public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .regexMatchers("/", "/index").permitAll()
                .anyRequest().authenticated()
                .and()
            .formLogin()
                .loginPage("/login")
                .permitAll()
                .and()
            .logout()
                .permitAll();
    }
 }

如何正确配置我的网页?

***注意:   *我目前没有任何Controller类。

2 个答案:

答案 0 :(得分:1)

抱歉,我会尽力说清楚

anyRequest().authenticated()使您对html资源的请求需要授权。你只允许所有'/'& '/登录'

所以,将permitAll添加到css,js,image http .authorizeRequests() .regexMatchers("/", "/index").permitAll() .antMatchers("/**/*.js", "/**/*.css").permitAll()

或更简单,为登录页面制作样式。不依赖于其他静态资源。

答案 1 :(得分:1)

我发现的正则表达式匹配器的问题是从服务器加载的任何资源,您需要在映射中考虑。

public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
   @Override
   protected void configure(HttpSecurity http) throws Exception {
       http
           .authorizeRequests()
              .antMatchers("/login", "/admin").hasRole('ADMIN') // e.g. for pages that need to be authenticated
              .anyRequest().permitAll() // all the others will be accessable by all
              .and()
           .formLogin()
              .loginPage("/login")
              .permitAll()
              .and()
           .logout()
              .permitAll();
        }
}

最简单的匹配方法如下:

  1. 通过覆盖addResourceHandlers
  2. 声明您的资源文件
  3. 使用antmatchers来处理url安全性(更简单,更简单),除非你有极其动态的url和关键参数