如何在 spring 应用程序中为 Java Melody Monitor URL 添加安全性

How to add security for Java Melody Monitor URL in spring application

我们正在 spring 应用程序中使用 Java Melody。我想添加安全性以仅由管理员用户访问 /monitoring url。我必须检查一些 属性 值和权限,基于那个应该获得访问权限。

实现这一目标有哪些不同的方法?我们可以 spring 安全吗?

如果我需要在此处提供任何其他信息,请告诉我。

您可以使用 javamelody 参数 authorized-users 进行 http 基本身份验证或 allowed-addr-pattern 进行基于 ip 地址的访问。 参见 https://github.com/javamelody/javamelody/wiki/UserGuide#16-security

例如在application.yml中,如果你使用Spring-boot:

javamelody:
  init-parameters:
    authorized-users: admin:password

或者您可以将 Spring 安全性与 .antMatchers("/monitoring").hasRole("ADMIN") 一起使用。

例如在Spring-boot 2中,使用spring-boot-starter-security依赖,基本认证和内存用户存储:

import org.springframework.context.annotation.Bean;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.provisioning.InMemoryUserDetailsManager;

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.httpBasic().and().authorizeRequests().antMatchers("/monitoring").hasRole("ADMIN")
                .anyRequest().permitAll();
    }

    @Bean
    @Override
    public UserDetailsService userDetailsService() {
        UserDetails user = User.withDefaultPasswordEncoder().username("user").password("password")
                .roles("USER").build();
        UserDetails admin = User.withDefaultPasswordEncoder().username("admin").password("password")
                .roles("ADMIN").build();

        return new InMemoryUserDetailsManager(user, admin);
    }
}

如果您在没有 Spring 引导的情况下使用 Spring 安全性,请务必将 Spring 安全性过滤器放在 web.xml 文件中的 javamelody 监控过滤器之前。