用于Vaadin的Spring安全Java配置
我是这些框架的新手(Vaadin:7.6.1,Spring Security:4.0.3),我自问如何配置授权请求,如果我想构建一个Vaadin应用程序。
我查了几个例子,写这样的东西:
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter
{
[...]
@Override
protected void configure(HttpSecurity http) throws Exception
{
http
.authorizeRequests()
.antMatchers("/login**").permitAll()
.antMatchers("/UIDL/**").permitAll()
.antMatchers("/HEARTBEAT/**").authenticated()
.antMatchers("/VAADIN/**").permitAll()
.antMatchers("/resources/**").permitAll()
.anyRequest().authenticated()
.and()
.formLogin().loginPage("/login").permitAll()
.and()
.logout().permitAll()
.and()
.csrf().disable();
}
}
因为我想设计登录页面,所以我使用了Thymeleaf引擎。 因此我使用这个Controller类:
@Controller
public class LoginController
{
@RequestMapping("/login")
String login(Model model)
{
return "login";
}
}
哪个.antMatchers()应该定义我是否想阻止应用程序的每个请求,如果用户没有登录? 我知道我必须为登录页面定义antMatchers(“/ resources / **”)。permitAll()以获取css和图像。 但是这些模式像“/ UIDL / **”是什么,我需要它们什么?
哪个.antMatchers()应该定义我是否想阻止应用程序的每个请求,如果用户没有登录?
如果您只是想在用户未登录时阻止每个请求:
@Override
protected void configure(HttpSecurity http) throws Exception
{
http
.authorizeRequests()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login").permitAll()
.and()
.logout().permitAll()
.and()
.csrf().disable();
}
你不需要任何antMatcher
,甚至不需要登录页面,就像.formLogin()
部分一样,你已经为该页面包含了.permitAll()
。
现在对于静态资源(css,js,图像)和VAADIN来说,你可以重写另一种方法:
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring()
.antMatchers("/resources/**", "/VAADIN/**");
}
有了Spring Boot项目,如果我不允许在web.ignoring().antMatchers(...)
请求"/vaadinServlet/**"
,我还会发现问题。
这些模式像“/ UIDL / **”是什么,我需要它们什么?
当服务器收到请求时,Spring Security使用这些模式来确定它是允许还是拒绝访问请求。
它们表示应用程序的上下文根之后的URI的一部分,例如在上下文根为/
的情况下,然后请求http://server.com/UIDL/hello
Spring Security的URI部分用来确定是否给予存取权将是/UIDL/hello
**
表示任何包括任何子级别的内容,例如对于/UIDL/**
模式,请求/UIDL/hello/world/and/any/more/levels
将匹配。
也有单个*
表示,除了不包括子级别,例如对于/UIDL/*
模式,请求/UIDL/hello
将匹配,但不包括/UIDL/hello/world
。
至于VAADIN视图和用户界面,我不确定是否可以使用antMatchers
来授予或拒绝访问,但是您可以使用@EnableGlobalMethodSecurity(prePost = enabled)
注释配置类,然后可以使用@PreAuthorize( /* spel expression */)
批注在视图授予或拒绝访问。
更新 :回答评论问题:
区别在于WebSecurity#ignoring()
使得该请求从Spring Security过滤器链中跳过,并且它是静态资源的推荐方式,但应该在configure(HttpSecurity http)
内处理静态资源以外的其他任何内容。
资源
由于该路径用于提供主题,窗口小部件集和自定义内容(静态内容),因此该路径用于从Vaadin jar中进行dinamycally服务,但正如Vaadin文档中所述,生产环境中应该静态地提供服务它更快。
资源
UIDL:
用户界面定义语言(UIDL)是一种用于序列化用户界面内容以及从Web服务器到浏览器的响应变化的语言。 这个想法是,服务器端组件使用语言将自己“绘制”到屏幕(网页)上。 UIDL消息在浏览器中解析并转换为GWT小部件。
资源
心跳请求定期执行,以验证服务器和客户端之间的连接是否仍然存在,或者该会话尚未到期。
来源 - 见4.8.5,4.8.6,4.8.7和4.8.8节
链接地址: http://www.djcxy.com/p/89871.html上一篇: Java Config for Spring Security with Vaadin
下一篇: Pygtk color for drag