当前位置: 首页 > 知识库问答 >
问题:

使用Vaadin实现Spring Security性的Java配置

狄旻
2023-03-14
@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/**”这样的模式是什么呢?我需要它们做什么呢?

共有1个答案

王长卿
2023-03-14

如果我想在用户未登录的情况下阻止应用程序的每个请求,我应该定义哪个.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*/)注释来授予或拒绝访问。

更新:对评论问题的答复:

  1. 为什么使用configure(WebSecurity web)方法忽略资源,而不使用configure(HttpSecurity http)方法允许访问?是否有显著差异?

不同的是,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