AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當前位置:首頁 > 科技  > 軟件

面試官:Spring Boot 中的監視器是什么?不是監聽器嘛

來源: 責編: 時間:2024-04-23 18:03:36 143觀看
導讀嗨,你好呀,我是哪吒。面試的時候,被問到 “Spring Boot 中的監視器是什么?有哪些功能和作用?”我的第一反應就是,不應該是監聽器和攔截器嗎?監聽器是基于觀察者模式的實現,其工作原理是通過注冊監聽器來訂閱特定的事件,當這些

jvU28資訊網——每日最新資訊28at.com

嗨,你好呀,我是哪吒。jvU28資訊網——每日最新資訊28at.com

面試的時候,被問到 “Spring Boot 中的監視器是什么?有哪些功能和作用?”jvU28資訊網——每日最新資訊28at.com

我的第一反應就是,不應該是監聽器和攔截器嗎?jvU28資訊網——每日最新資訊28at.com

監聽器是基于觀察者模式的實現,其工作原理是通過注冊監聽器來訂閱特定的事件,當這些事件發生時,Spring框架會通知所有注冊了對應事件的監聽器,然后監聽器會執行相應的操作。jvU28資訊網——每日最新資訊28at.com

比如初始化數據、讀取配置文件、記錄日志等。jvU28資訊網——每日最新資訊28at.com

具體的操作步驟:jvU28資訊網——每日最新資訊28at.com

  • 定義一個事件類,它需要繼承自ApplicationEvent;
  • 創建一個監聽器類,實現ApplicationListener接口,并指定監聽的事件類型;
  • 在監聽器類中,可以重寫onApplicationEvent方法來定義當事件發生時的具體行為;
  • 將監聽器注冊到Spring上下文中,這可以通過實現CommandLineRunner接口或者使用@EventListener注解來完成。

面試官:我說的是監視器。jvU28資訊網——每日最新資訊28at.com

很多小伙伴開發多年,確實是沒注意過監視器這個概念。jvU28資訊網——每日最新資訊28at.com

Spring Boot中的監視器是Actuator,我一般用來監控響應時間、CPU使用率、內存使用情況。jvU28資訊網——每日最新資訊28at.com

還可以通過分析日志信息,快速定位問題原因,還可以提供預警機制,以便在出現故障或異常時及時采取措施進行修復。jvU28資訊網——每日最新資訊28at.com

監視器可以與自動化運維工具集成,實現自動化部署、監控、報警和恢復等功能,提高運維效率。jvU28資訊網——每日最新資訊28at.com

可以通過一些端點進行監控和管理,比如:jvU28資訊網——每日最新資訊28at.com

  • 通過/actuator/health端點可以查看應用的健康狀態信息。
  • 通過/actuator/info端點獲取應用的基本信息。
  • 通過/actuator/metrics端點收集應用運行時的性能指標。
  • 通過/actuator/httptrace端點追蹤HTTP請求的處理過程。
  • 記錄應用的使用情況,如訪問次數等。
  • 查看和管理應用中Spring Bean的狀態。
  • 允許通過/actuator/shutdown端點來平滑關閉應用。

小結一下:jvU28資訊網——每日最新資訊28at.com

監聽器通常用于響應應用程序中的特定事件,當某個事件發生時,監聽器可以執行預定義的動作。jvU28資訊網——每日最新資訊28at.com

監聽器用于響應特定的應用事件,如服務啟動、請求處理等,以及實現特定業務邏輯的處理。jvU28資訊網——每日最新資訊28at.com

監視器指的是能夠監控和管理應用程序狀態的組件或工具。在Spring Boot中,Actuator是一個內置的監控組件,它提供了多種端點來檢查應用的健康狀況、性能指標、日志信息等。jvU28資訊網——每日最新資訊28at.com

監視器用于監控應用程序的運行狀態,提供健康檢查、性能統計等信息,幫助維護和優化應用性能。jvU28資訊網——每日最新資訊28at.com

再分享幾道,徹底掌握監視器的常見問題。jvU28資訊網——每日最新資訊28at.com

1.使用監視器時的有哪些需要注意?

在開始使用監視器之前,需要明確監控的目標和范圍。確定需要監控的關鍵指標,如響應時間、錯誤率、資源利用率等,并設定合理的閾值。jvU28資訊網——每日最新資訊28at.com

根據監控目標,配置合適的監控策略。這可能包括監控頻率、數據聚合方式、報警觸發條件等。確保監控策略能夠有效地捕捉到潛在問題,并及時發出警報。jvU28資訊網——每日最新資訊28at.com

監視器本身也會占用一定的系統資源,并可能對應用程序的性能產生一定影響。因此,在選擇和使用監視器時,需要權衡其功能和性能開銷,確保不會對應用程序造成過大的負擔。jvU28資訊網——每日最新資訊28at.com

監視器可能會收集到一些敏感信息,如用戶數據、系統配置等。因此,在使用監視器時,需要確保敏感信息得到妥善保護,避免泄露給未經授權的人員。jvU28資訊網——每日最新資訊28at.com

2.除了基本認證,Spring Boot Actuator還支持哪些身份驗證方式?

  • OAuth2:這是一種開放標準,它允許應用程序在獲得用戶授權后,訪問其數據而無需知道用戶的憑據。Actuator可以通過配置OAuth2客戶端和提供授權服務器的URL來集成OAuth2認證。
  • LDAP(輕量級目錄訪問協議):如果你的應用程序已經使用了LDAP進行用戶管理,Actuator可以配置為使用LDAP進行身份驗證,這樣用戶就可以使用他們在LDAP中的憑據來訪問Actuator端點。
  • JWT(JSON Web令牌):這是一種自包含的令牌,用于在各方之間安全地傳輸信息。Actuator可以配置為接受JWT作為有效的身份驗證方法。
  • JMX(Java管理擴展):雖然JMX主要用于內部監控和管理,但Actuator也提供了通過JMX端點訪問信息的機制。這通常在開發和測試環境中使用,因為它需要直接連接到運行中的應用。
  • SSH(安全外殼協議):Actuator支持通過SSH進行遠程訪問和管理,這在需要安全的遠程訪問時非常有用。

3.Spring Boot中如何使用Actuator?

在pom.xml文件中添加Actuator的依賴。jvU28資訊網——每日最新資訊28at.com

<dependency>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-starter-actuator</artifactId></dependency>

在application.properties或application.yml中配置Actuator的相關屬性,例如開啟所有的端點:jvU28資訊網——每日最新資訊28at.com

management:  endpoints:    web:      exposure:        include: "*"

使用瀏覽器或者命令行工具(如curl)訪問不同的端點。jvU28資訊網——每日最新資訊28at.com

# 獲取應用的健康狀態信息curl http://localhost:8080/actuator/health# 獲取應用的基本信息curl http://localhost:8080/actuator/info# 獲取應用的性能指標curl http://localhost:8080/actuator/metrics# 追蹤HTTP請求的處理過程curl http://localhost:8080/actuator/httptrace# 關閉應用curl -X POST http://localhost:8080/actuator/shutdown

4.如何在Spring Boot Actuator中使用自定義的用戶名和密碼進行認證?

創建一個安全配置類,繼承WebSecurityConfigurerAdapter,并重寫configure(AuthenticationManagerBuilder auth)方法。在該方法中,可以配置自定義的用戶名和密碼。jvU28資訊網——每日最新資訊28at.com

@Configuration@EnableWebSecuritypublic class SecurityConfig extends WebSecurityConfigurerAdapter {    @Override    protected void configure(AuthenticationManagerBuilder auth) throws Exception {        auth.inMemoryAuthentication() // 使用內存中的用戶信息進行認證                .withUser("myuser") // 自定義用戶名                .password("{noop}mypassword") // 自定義密碼(使用明文)                .roles("USER"); // 設置用戶角色    }}

在application.properties或application.yml中配置端點的安全路徑和訪問權限。jvU28資訊網——每日最新資訊28at.com

management:  endpoints:    web:      base-path: /actuator # 設置Actuator端點的根路徑      exposure:        include: "*" # 暴露所有端點  security:    enabled: true # 啟用Actuator的安全認證

啟動應用后,訪問Actuator端點時,會提示輸入自定義的用戶名和密碼進行身份驗證。例如,訪問/actuator/health端點時,瀏覽器會彈出一個登錄窗口,要求輸入自定義的用戶名和密碼。jvU28資訊網——每日最新資訊28at.com

5.如何在Spring Boot Actuator中限制特定端點的訪問權限?

在Spring Boot Actuator中,可以通過配置端點的訪問權限來限制特定端點的訪問。jvU28資訊網——每日最新資訊28at.com

創建一個安全配置類,繼承WebSecurityConfigurerAdapter,并重寫configure(HttpSecurity http)方法。在該方法中,可以配置特定端點的訪問權限。jvU28資訊網——每日最新資訊28at.com

@Configuration@EnableWebSecuritypublic class SecurityConfig extends WebSecurityConfigurerAdapter {    @Override    protected void configure(HttpSecurity http) throws Exception {        http            .authorizeRequests()                .antMatchers("/actuator/health").hasRole("ADMIN") // 僅允許具有ADMIN角色的用戶訪問/actuator/health端點                .and()            .httpBasic(); // 使用基本認證方式    }}

在application.properties或application.yml中配置用戶名和密碼以及用戶的角色:jvU28資訊網——每日最新資訊28at.com

spring:  security:    user:      name: admin # 用戶名      password: secret # 密碼      roles: ADMIN # 用戶角色

啟動應用后,訪問Actuator端點時,會提示輸入用戶名和密碼進行身份驗證。例如,訪問/actuator/health端點時,瀏覽器會彈出一個登錄窗口,要求輸入用戶名和密碼。只有具有ADMIN角色的用戶才能成功訪問該端點。jvU28資訊網——每日最新資訊28at.com

6.如何在Spring Boot Actuator中使用OAuth2進行認證?

添加spring-boot-starter-oauth2-client依賴到pom.xml文件中jvU28資訊網——每日最新資訊28at.com

<dependency>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-starter-oauth2-client</artifactId></dependency>

創建一個安全配置類,繼承WebSecurityConfigurerAdapter,并重寫configure(HttpSecurity http)方法。在該方法中,可以配置端點的訪問權限和OAuth2認證。jvU28資訊網——每日最新資訊28at.com

@Configuration@EnableWebSecuritypublic class SecurityConfig extends WebSecurityConfigurerAdapter {    @Override    protected void configure(HttpSecurity http) throws Exception {        http.authorizeRequests()                .antMatchers("/actuator/**").authenticated() // 需要認證才能訪問Actuator端點                .and()            .oauth2Login(); // 使用OAuth2認證方式    }}

在application.properties或application.yml中配置OAuth2相關的屬性,例如客戶端ID、客戶端密鑰和授權服務器的URL等。jvU28資訊網——每日最新資訊28at.com

spring:  security:    oauth2:      client:        registration:          myprovider: # OAuth2提供商名稱            client-id: your-client-id # 客戶端ID            client-secret: your-client-secret # 客戶端密鑰            authorization-grant-type: authorization_code # 授權類型            redirect-uri: "{baseUrl}/login/oauth2/code/{registrationId}" # 回調URL            scope: openid,profile,email # 請求的權限范圍        provider:          myprovider: # OAuth2提供商名稱            authorization-uri: https://your-authorization-server.com/oauth/authorize # 授權服務器的授權URL            token-uri: https://your-authorization-server.com/oauth/token # 授權服務器的令牌URL            user-info-uri: https://your-authorization-server.com/userinfo # 用戶信息URL            jwk-set-uri: https://your-authorization-server.com/jwks # JSON Web Key Set URL

啟動應用后,訪問Actuator端點時,會跳轉到OAuth2認證服務器的授權頁面,要求輸入用戶名和密碼進行身份驗證。成功認證后,會返回一個授權碼,然后應用會使用該授權碼獲取訪問令牌,并進行后續的認證操作。jvU28資訊網——每日最新資訊28at.com

7.如何在Spring Boot Actuator中使用JWT進行認證?代碼舉例說明

(1)導入依賴

首先,需要在項目的pom.xml文件中添加Spring Security和JWT相關的依賴。jvU28資訊網——每日最新資訊28at.com

<dependency>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-starter-security</artifactId></dependency><dependency>    <groupId>io.jsonwebtoken</groupId>    <artifactId>jjwt</artifactId>    <version>0.9.1</version></dependency>

(2)配置JWT工具類

創建一個JWT工具類,用于生成和解析JWT令牌。這個工具類應該包含方法來生成令牌(通常在用戶登錄時),以及驗證和解析令牌(在需要用戶身份信息的端點)。jvU28資訊網——每日最新資訊28at.com

public class JwtUtil {    private static final String SECRET_KEY = "yourSecretKey"; // 替換為你的密鑰    public static String generateToken(String subject) {        return Jwts.builder()                .setSubject(subject)                .setIssuedAt(new Date())                .signWith(SignatureAlgorithm.HS256, SECRET_KEY)                .compact();    }    public static Claims parseToken(String token) {        return Jwts.parser()                .setSigningKey(SECRET_KEY)                .parseClaimsJws(token)                .getBody();    }}

(3)創建攔截器

可以創建一個攔截器來處理帶有JWT的請求。攔截器會檢查每個請求的HTTP頭部是否包含JWT,如果存在,則解析JWT并驗證其有效性。如果驗證成功,請求將被允許繼續;如果驗證失敗,將返回未經授權的響應。jvU28資訊網——每日最新資訊28at.com

public class JwtInterceptor implements HandlerInterceptor {    @Override    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {        String token = request.getHeader("Authorization");        if (token != null && !token.isEmpty()) {            try {                JwtUtil.parseToken(token); // 驗證令牌                return true; // 令牌有效,允許請求繼續            } catch (Exception e) {                response.setStatus(HttpServletResponse.SC_UNAUTHORIZED); // 令牌無效,返回未授權響應                return false;            }        } else {            response.setStatus(HttpServletResponse.SC_UNAUTHORIZED); // 缺少令牌,返回未授權響應            return false;        }    }}

(4)安全存儲密鑰

確保JWT的密鑰安全存儲,并定期更換以防止潛在的安全風險。密鑰的安全性對于維護整個認證系統的安全至關重要。jvU28資訊網——每日最新資訊28at.com

(5)使用Actuator端點

Spring Boot Actuator提供了多種監控和管理生產環境的端點。在使用JWT進行認證時,可以通過配置Actuator的端點來限制訪問,只有持有有效JWT的用戶才能訪問這些端點。jvU28資訊網——每日最新資訊28at.com

(6)測試驗證

完成以上配置后,應該進行全面的測試,以確保JWT認證機制按預期工作。這包括測試令牌的生成、驗證過程,以及確保未授權的請求被正確拒絕。jvU28資訊網——每日最新資訊28at.com

8.JWT是什么?有什么用?有哪些應用場景?

JWT,全稱為JSON Web Token,就是我們經常提到的token,它以JSON對象的形式安全地在各個實體間傳輸信息。這些信息是經過數字簽名的,因此可以被驗證和信任。jvU28資訊網——每日最新資訊28at.com

JWT由三部分組成,它們用點(.)分隔,分別是:jvU28資訊網——每日最新資訊28at.com

  • Header(頭部):包含兩部分信息,令牌的類型(即JWT)和所使用的簽名算法(如HMAC SHA256或RSA)。
  • Payload(負載):包含有關實體(通常是用戶)和其他數據的聲明。這部分也可以包含其他自定義信息。但請注意,JWT默認不加密,任何人都可以解碼其內容,因此不要將敏感信息放入負載中,除非它們是加密的。
  • Signature(簽名):是使用頭部中指定的算法和密鑰對頭部和負載進行簽名的結果。這使得接收方可以驗證信息的發送者以及信息的完整性。

JWT的主要用途包括:jvU28資訊網——每日最新資訊28at.com

  • 授權:用戶登錄后,系統會返回一個JWT,之后的每個請求都會攜帶這個令牌,以便用戶訪問允許的資源和服務。這種方式在實現單點登錄(SSO)時特別有用,因為JWT可以輕松跨域使用,且相比傳統Cookie方式更加輕量級。
  • 防止數據篡改:JWT可以使用加密算法對數據進行簽名,即使數據在傳輸過程中被截獲,由于缺乏發送方的私鑰,攻擊者很難同時篡改數據和簽名,從而保證了數據的完整性。
  • 鑒權:JWT可以用于驗證用戶是否有權訪問系統。與傳統的Session加Cookie的組合相比,JWT將用戶數據直接下發給客戶端,每次請求時客戶端會附帶JWT一并發送給服務器,這樣服務器就無需緩存用戶數據,降低了服務器的開銷,并且提高了系統的可擴展性。

9.在企業應用集成中,JWT有哪些優勢?

JWT可以在用戶初次登錄后發放,之后的每次請求都會攜帶這個令牌,無需再次進行身份驗證,這簡化了認證流程。jvU28資訊網——每日最新資訊28at.com

JWT自身包含了所有必要的身份驗證信息,這意味著服務器不需要存儲會話信息,這增加了系統的可用性和伸縮性,減輕了服務端的負擔。jvU28資訊網——每日最新資訊28at.com

JWT基于標準JSON格式,可以輕松在不同的平臺和框架之間傳遞和使用,這在微服務架構和分布式系統中尤為重要。jvU28資訊網——每日最新資訊28at.com

JWT通常使用HS256等加密算法進行簽名,確保了令牌的完整性和真實性。jvU28資訊網——每日最新資訊28at.com

10.如何在Spring Boot Actuator中使用SSH進行認證?代碼舉例說明

導入依賴。
<dependency>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-starter-data-jpa</artifactId></dependency><dependency>    <groupId>com.hierynomus</groupId>    <artifactId>sshj</artifactId>    <version>0.31.0</version></dependency>

在application.properties或application.yml配置文件中,可以設置SSH的認證信息。jvU28資訊網——每日最新資訊28at.com

management:  endpoints:    web:      exposure:        include: '*' # 暴露所有端點  endpoint:    health:      show-details: always # 顯示健康檢查詳細信息  security:    enabled: true # 啟用安全認證    roles: admin # 設置訪問權限為admin角色ssh:  username: your_username # SSH用戶名  password: your_password # SSH密碼  host: your_host # SSH主機名

在數據庫中創建一個具有管理員角色的用戶,用于訪問Actuator端點。這可以通過使用Spring Data JPA和Hibernate來實現。例如,可以創建一個名為User的實體類和一個名為UserRepository的接口:jvU28資訊網——每日最新資訊28at.com

@Entitypublic class User {    @Id    @GeneratedValue(strategy = GenerationType.IDENTITY)    private Long id;    private String username;    private String password;    // 省略getter和setter方法}@Repositorypublic interface UserRepository extends JpaRepository<User, Long> {    Optional<User> findByUsername(String username);}

在Spring Security的配置類中,可以配置SSH的安全認證。例如,可以創建一個名為SecurityConfig的配置類:jvU28資訊網——每日最新資訊28at.com

@Configuration@EnableWebSecuritypublic class SecurityConfig extends WebSecurityConfigurerAdapter {    @Autowired    private UserRepository userRepository;    @Override    protected void configure(HttpSecurity http) throws Exception {        http.authorizeRequests()            .antMatchers("/actuator/**").hasRole("ADMIN") // 只允許ADMIN角色訪問Actuator端點            .and()            .formLogin().permitAll() // 允許所有用戶訪問登錄頁面            .and()            .logout().permitAll(); // 允許所有用戶訪問注銷頁面    }    @Autowired    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {        auth.userDetailsService(userDetailsService()).passwordEncoder(new BCryptPasswordEncoder());    }    @Bean    public UserDetailsService userDetailsService() {        return username -> userRepository.findByUsername(username)                .map(user -> User.withUsername(user.getUsername()).password(user.getPassword()).roles("ADMIN").build())                .orElseThrow(() -> new UsernameNotFoundException("User not found"));    }}

完成以上配置后,應該進行全面的測試,以確保SSH認證機制按預期工作。這包括測試SSH連接、登錄和注銷功能等。jvU28資訊網——每日最新資訊28at.com

11.SSH是什么?有什么用?有哪些應用場景?

SSH最初設計用于替代不安全的Telnet和FTP,現在它廣泛應用于安全地連接和管理遠程系統。jvU28資訊網——每日最新資訊28at.com

SSH的主要用途包括:jvU28資訊網——每日最新資訊28at.com

  • 遠程登錄和終端訪問:用戶可以通過SSH客戶端遠程登錄到服務器或其他設備,并進行命令行操作或圖形界面操作。
  • 文件傳輸:SFTP(SSH File Transfer Protocol)是基于SSH實現的安全文件傳輸協議,允許用戶在本地系統和遠程服務器之間安全地傳輸文件。
  • 端口轉發:SSH可以實現端口轉發,從而在本地主機和遠程主機之間建立安全的通信通道,用于訪問遠程主機上的服務。
  • 遠程執行命令:SSH允許用戶在遠程服務器上執行命令,這對于自動化任務和遠程管理非常有用。
  • 隧道:SSH可以創建安全的通信隧道,通過不受信任的網絡傳輸數據。

12.SSH和Telnet的區別是什么?

SSH和Telnet都是遠程登錄協議,但它們在安全性、加密方式和端口號等方面存在顯著差異。jvU28資訊網——每日最新資訊28at.com

  • SSH不僅是替代Telnet的遠程控制臺管理應用程序的行業標準,還可以為ftp、pop等提供一個安全的通道。相比之下,Telnet的功能相對單一,主要提供在本地計算機上完成遠程主機工作的能力。
  • SSH提供了加密傳輸,而Telnet則使用明文傳輸。
  • SSH通常使用端口22,而Telnet使用端口23
  • 由于Telnet傳輸的數據是明文的,因此默認情況下防火墻是不信任Telnet的。而SSH由于其加密特性,通常能得到防火墻的信任。

本文鏈接:http://www.tebozhan.com/showinfo-26-84908-0.html面試官:Spring Boot 中的監視器是什么?不是監聽器嘛

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 你真的知道嗎?Python中什么變量會返回false

下一篇: 快手二面:有了Cookie和Session 為什么還要JWT ?你說一下JWT的原理?

標簽:
  • 熱門焦點
Top