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

Spring引导执行器安全维修不能正常工作

张亦
2023-03-14

尝试在调用以下命令时保护spring Actuctor服务/管理上下文路径:

http://localhost:9091/manage/metrics

在yalm.properties中使用此配置

管理:端口:9091地址:127.0.0.1上下文路径:/manage security:enabled:true角色:admin

带有安全执行器服务层Git分支

Spring Security配置

'@override protected void configure(HttpSecurity http)引发异常{

    http.authorizeRequests().antMatchers("/pizzas","/info","/addPizza").hasAnyRole("USER","ADMIN").and().authorizeRequests().antMatchers("/users","/addUser").hasRole("ADMIN").and().authorizeRequests().antMatchers("/static/**","/logout","/login").permitAll();

    http.formLogin().loginPage("/login").failureUrl("/login?error").permitAll();

    http.logout().logoutSuccessUrl("/?logout").deleteCookies("remember-me").permitAll();


    http.sessionManagement().maximumSessions(1).
    expiredUrl("/?expired").maxSessionsPreventsLogin(true).and()
    .sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED);
}

/**
 * Configure global security with Bccyptenoncder and custom userDetailService with Spring Security
 * @param auth
 * @throws Exception
 */
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {

    auth.userDetailsService(userDetailsServiceImpl).passwordEncoder(passwordEncoder());
}


/**
 * Bcrypt password encoding configuration, more info at http://www.baeldung.com/spring-security-registration-password-encoding-bcrypt
 * @return
 */
@Bean
public PasswordEncoder passwordEncoder() {
    return new BCryptPasswordEncoder();
}
'

共有1个答案

鲁景山
2023-03-14

春靴团队已经解决了我这个问题。我在这里分享解决方案:

同源政策

您不能在执行器安全性中使用主Spring应用程序的登录页面。原因是cookie将与应用程序的域+端口+上下文路径相关联。这是同源政策的一部分

为了使用此配置,您需要在管理应用程序中设置一个登录页面。为此,您只需要在请求/login时返回一个HTML表单。但是,我不确定您将如何在引导管理应用程序中做到这一点。也许@philwebb或@dsyer可以详细说明如何做到这一点。

管理应用程序的不同安全配置

或者,您可以为管理应用程序创建单独的安全配置,允许使用基本身份验证进行身份验证。为此,您需要创建一个类似于以下内容的安全配置:

@Order(0)
@Configuration
public class ManagementSecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
         http
            .requestMatchers()
                .requestMatchers(request -> "/manage".equals(request.getContextPath()))
                .and()
            .authorizeRequests()
                .anyRequest().hasRole("ADMIN")
                .and()
            .httpBasic();
    }
}

您可以更简洁地重写配置,如:

 http
    .authorizeRequests()
        .antMatchers("/pizzas","/info","/addPizza").hasAnyRole("USER","ADMIN")
        .antMatchers("/users","/addUser").hasRole("ADMIN")
        .antMatchers("/static/**","/logout","/login").permitAll()
        .and()
    .formLogin()
        .loginPage("/login")
        .failureUrl("/login?error")
        .permitAll()
        .and()
    .logout()
        .logoutSuccessUrl("/?logout")
        .deleteCookies("remember-me")
        .permitAll();

您可以考虑阅读Spring Security Java Config Preview:Readability,了解如何格式化配置以更好地阅读它的详细信息。

 类似资料:
  • 我在我的应用程序中使用了Spring-Boot1.3.1和Spring-Boot-Actutor。我使用作为中的父级。 为了禁用安全性,我在中添加了2个条目。 它仍然没有禁用基本的安全性。当我在本地Tomcat中启动应用程序时,我看到日志文件中的默认密码。

  • 我添加了执行器依赖 按照教程中的建议 但是当我点击时,它不会给出预期的结果。上面写着 Spring Boot版本为1.5.4。和Java1.8需要做哪些附加设置?

  • 这是我的安全配置代码: 但在编译spring时,仍在为我生成密码。 我通过print语句检查了配置是否正在加载,发现安全配置正在加载。我是否应该对给定的用户ID和密码进行任何更改。 提前感谢。

  • 执行器功能是通过在项目中添加“Spring-启动-启动-执行器”来提供的。 此时,security被禁用,因此项目不会导入Spring-Security。 使用spring-boot 1.5.x,所有执行器endpoint(自动提供,作为/info,以及我特定定义的endpoint)都正常工作。 使用spring-boot 1.5.x时,tomcat.version=9.0.0.m9 使用spri

  • 我尝试在我的应用程序中扮演角色。但我一直有个消息。 在数据库中,我有列角色和值USER或ADMIN 重新控制器 如果我评论

  • 我使用这个Camel示例作为参考,并更改了初始化器以扩展,以便可以部署到JBoss EAP6.4。 当它作为SpringBoot应用程序运行时: null 部署到JBoss时: 执行器endpoint均不工作。它们都返回http 404。 这个问题并不是演示所独有的,我们在JBoss中运行的所有容器化Camel Spring Boot应用程序都有同样的问题,并且需要明确的是,这些应用程序的功能完全