所以我是Spring
的新手,并在使用Spring-Boot
开发网络应用程序时学习。
目前,我的网页包含两个html
页:index.html
和login.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类。
答案 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();
}
}
最简单的匹配方法如下: