成果展现
客户端
maven援用
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.0.RELEASE</version> </parent> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>de.codecentric</groupId> <artifactId>spring-boot-admin-starter-client</artifactId> <version>2.0.0</version> </dependency>
配置文件
management: endpoints: web: exposure: include: '*' endpoint: health: show-details: always
平安爱护
public class ActuatorAuthFilter implements Filter, Ordered { private AuthService authService = SpringBootBeanUtil.getBean(AuthService.class); @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { boolean authPass = false; HttpServletRequest req = (HttpServletRequest) request; String system = req.getHeader("system"); String token = req.getHeader("token"); if ( !StringUtil.isEmpty(system) && !StringUtil.isEmpty(token)) { if(system.equals("haopanwatch") && token.equals("7e447e5d38d323b847edf2b4895eb242")){ authPass = true; } } if (authPass) { chain.doFilter(request, response); } else { Result result = Result.errorResult().setMsg("NoAuthAccess").setCode(SystemErrorCodeEnum.ErrorCode.TokenAuthError.get_value()); response.getWriter().println(JSON.toJSON(result)); } } @Override public void destroy() { } @Override public int getOrder() { return 11; }}
治理端
maven援用
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.0.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>de.codecentric</groupId> <artifactId>spring-boot-admin-starter-server</artifactId> <version>2.2.0</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jetty</artifactId> </dependency> </dependencies>
配置文件
server.port=9550spring.application.name=springboot-admin-server#配置一个账号和明码spring.security.user.name=adminspring.security.user.password=abcd@1234
启动注解
@SpringBootApplication@EnableAdminServerpublic class HaopanWatchApplication { public static void main(String[] args) { SpringApplication.run(HaopanWatchApplication.class, args); } @Bean public ApplicationRunner applicationRunner() { return applicationArguments -> { System.out.println("haopanwatch启动胜利!"); }; }}
平安爱护
@Configurationpublic class SecuritySecureConfig extends WebSecurityConfigurerAdapter { //我的项目利用门路 private final String adminContextPath; public SecuritySecureConfig(AdminServerProperties adminServerProperties) { this.adminContextPath = adminServerProperties.getContextPath(); } @Override protected void configure(HttpSecurity http) throws Exception { SavedRequestAwareAuthenticationSuccessHandler successHandler = new SavedRequestAwareAuthenticationSuccessHandler(); successHandler.setTargetUrlParameter("redirectTo"); successHandler.setDefaultTargetUrl(adminContextPath + "/"); http.authorizeRequests() //无需登录即可拜访 .antMatchers(adminContextPath + "/assets/**").permitAll() .antMatchers(adminContextPath + "/login").permitAll() .anyRequest().authenticated() .and() //登录和登出门路 .formLogin().loginPage(adminContextPath + "/login").successHandler(successHandler).and() .logout().logoutUrl(adminContextPath + "/logout").and() //开启http basic反对,admin-client注册时须要应用 .httpBasic().and() .csrf() //开启基于cookie的csrf爱护 .csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse()) //疏忽这些门路的csrf爱护以便admin-client注册 .ignoringAntMatchers( adminContextPath + "/instances", adminContextPath + "/actuator/**" ); }}
客户端认证
@Componentpublic class HttpHeadersProviderConfig implements HttpHeadersProvider { @Override public HttpHeaders getHeaders(Instance instance) { HttpHeaders httpHeaders = new HttpHeaders(); //设置约定好的申请头参数 httpHeaders.add("token", "7e447e5d38d323b847edf2b4895eb242"); httpHeaders.add("system", "haopanwatch"); return httpHeaders; }}