@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();
}
}
@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()
。
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring()
.antMatchers("/resources/**", "/VAADIN/**");
}
在Spring引导项目中,如果不允许请求在web.igneration().antmatchers(...)
中“/VAADINServlet/**”
时,我还发现了一些问题。
像“/uidl/**”这样的模式是什么?我需要它们做什么?
当服务器接收到请求时,Spring Security使用这些模式来确定它应该允许还是拒绝对请求的访问。
它们表示应用程序上下文根之后的URI部分,例如,在上下文根为/
的情况下,则像http://server.com/uidl/hello
这样的请求Spring Security将用于确定是否给予acces的URI部分将是/uidl/hello
**
表示包含任何子级别的任何内容,例如,对于/UIDL/**
模式,请求/UIDL/Hello/World/和/any/more/levels
将匹配。
还有一个*
表示任何东西,但不包括子级别,例如对于/UIDL/*
模式,请求/UIDL/Hello
将匹配,但不匹配/UIDL/Hello/World
。
至于VAADIN视图和UI,我不确定是否可以使用antmatchers
来授予或拒绝访问,但您可以使用@EnableGlobalMethodSecurity(prePost=enabled)
来注释配置类,然后可以在视图上使用@preauthorize(/*spel expression*/)
注释来授予或拒绝访问。
更新:对评论问题的答复:
不同的是,websecurity#ligene()
使请求从Spring安全筛选器链中跳过,这是静态资源的推荐方法,除静态资源之外的任何其他内容都应在configure(httpsecurityhttp)
中处理。
因为该路径用于为主题、小部件集和自定义提供服务(这是静态内容),所以该路径用于从Vaadin jar中直接提供服务,但正如Vaadin文档中所建议的那样,在生产环境中应该以静态方式提供服务,因为这样更快。
来源
UIDL:
来源
会定期执行心跳请求,以验证服务器和客户端之间的连接是否仍然有效,或者会话是否未过期。
资料来源-见第4.8.5、4.8.6、4.8.7和4.8.8节
本文向大家介绍SpringBoot 配合 SpringSecurity 实现自动登录功能的代码,包括了SpringBoot 配合 SpringSecurity 实现自动登录功能的代码的使用技巧和注意事项,需要的朋友参考一下 自动登录是我们在软件开发时一个非常常见的功能,例如我们登录 QQ 邮箱: 很多网站我们在登录的时候都会看到类似的选项,毕竟总让用户输入用户名密码是一件很麻烦的事。 自动登录功能
本文向大家介绍SpringBoot之Java配置的实现,包括了SpringBoot之Java配置的实现的使用技巧和注意事项,需要的朋友参考一下 Java配置也是Spring4.0推荐的配置方式,完全可以取代XML的配置方式,也是SpringBoot推荐的方式。 Java配置是通过@Configuation和@Bean来实现的: 1、@Configuation注解,说明此类是配置类,相当于Spr
本文向大家介绍SpringSecurity 测试实战,包括了SpringSecurity 测试实战的使用技巧和注意事项,需要的朋友参考一下 引言 试题管理系统的安全模块使用Spring Security,代码从原华软仓库移植,在移植的过程中,发现原测试编写的不好,遂在新系统中对安全模块测试进行了重构。 Spring 测试 添加@SpringBootTest注解,意为这是一个基于SpringBoot
问题内容: 对于我的应用程序,我有一个接口和实现此接口的多个类,例如,等。在我的一个服务中,我需要创建许多Scale,并且我想使用Spring定义应创建的Scale实现。 。我将如何实施这样的事情? - 我当时正在考虑创建一个工厂,就像在“抽象工厂模式”中那样,我可以调用它来获得我在Spring XML中配置的任何实现的Scale: 但是用这种方法,我如何配置ScaleFactory应该从Spri
我正在尝试使用vaadin,并希望在我的Vaading7项目中使用甘特聊天插件。https://vaadin.com/directory#addon/vaadin-gantt-diagram:vaadin 由于这与Vaadin7不兼容,我正在尝试修复插件中的一些代码,使其与Vaadin7兼容。 “WidgetSet不包含Ru.Bazon.vaadin.GanttDiagram.canvas.Gan
本文向大家介绍vaadin 使用Maven创建Vaadin项目,包括了vaadin 使用Maven创建Vaadin项目的使用技巧和注意事项,需要的朋友参考一下 示例 使用Maven,您可以创建具有vaadin-archetype-application原型的Vaadin项目。您也可以在IDE中添加该原型,以使用IDE创建Maven项目。 一旦执行了以上命令,您将具有以下项目结构。 创建的默认Mav