最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解spring security之httpSecurity使用示例

 更新時(shí)間:2018年08月20日 08:52:08   作者:一天不進(jìn)步,就是退步  
這篇文章主要介紹了詳解spring security之httpSecurity使用示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

httpSecurity

類似于spring security的xml配置文件命名空間配置中的<http>元素。它允許對(duì)特定的http請(qǐng)求基于安全考慮進(jìn)行配置。默認(rèn)情況下,適用于所有的請(qǐng)求,但可以使用requestMatcher(RequestMatcher)或者其它相似的方法進(jìn)行限制。

使用示例:

最基本的基于表單的配置如下。該配置將所有的url訪問(wèn)權(quán)限設(shè)定為角色名稱為"ROLE_USER".同時(shí)也定義了內(nèi)存認(rèn)證模式:使用用戶名"user"和密碼“password”,角色"ROLE_USER"來(lái)認(rèn)證。

 @Configuration
 @EnableWebSecurity
 public class FormLoginSecurityConfig extends WebSecurityConfigurerAdapter {
 
  @Override
  protected void configure(HttpSecurity http) throws Exception {
   http
    .authorizeRequests()
     .antMatchers("/").hasRole("USER")
     .and()
    .formLogin();
  }
 
  @Override
  protected void configure(AuthenticationManagerBuilder auth) throws Exception {
   auth
    .inMemoryAuthentication()
     .withUser("user")
       .password("password")
       .roles("USER");
  }
 }

 配置基于openId的認(rèn)證方式

 basic示例,不使用attribute exchange

    @Configuration
  @EnableWebSecurity
  public class OpenIDLoginConfig extends WebSecurityConfigurerAdapter {
  
   @Override
   protected void configure(HttpSecurity http) {
    http
     .authorizeRequests()
      .antMatchers("/").hasRole("USER")
      .and()
     .openidLogin()
      .permitAll();
   }
  
   @Override
   protected void configure(AuthenticationManagerBuilder auth) throws Exception {
    auth
      .inMemoryAuthentication()
       // the username must match the OpenID of the user you are
       // logging in with
       .withUser("https://www.google.com/accounts/o8/id?id=lmkCn9xzPdsxVwG7pjYMuDgNNdASFmobNkcRPaWU")
        .password("password")
        .roles("USER");
   }
  }

下面展示一個(gè)更高級(jí)的示例,使用attribute exchange

  @Configuration
  @EnableWebSecurity
  public class OpenIDLoginConfig extends WebSecurityConfigurerAdapter {
  
   @Override
   protected void configure(HttpSecurity http) {
    http
     .authorizeRequests()
      .antMatchers("/").hasRole("USER")
      .and()
     .openidLogin()
      .loginPage("/login")
      .permitAll()
      .authenticationUserDetailsService(new AutoProvisioningUserDetailsService())
       .attributeExchange("https://www.google.com/.")
        .attribute("email")
         .type("http://axschema.org/contact/email")
         .required(true)
         .and()
        .attribute("firstname")
         .type("http://axschema.org/namePerson/first")
         .required(true)
         .and()
        .attribute("lastname")
         .type("http://axschema.org/namePerson/last")
         .required(true)
         .and()
        .and()
       .attributeExchange(".yahoo.com.")
        .attribute("email")
         .type("http://schema.openid.net/contact/email")
         .required(true)
         .and()
        .attribute("fullname")
         .type("http://axschema.org/namePerson")
         .required(true)
         .and()
        .and()
       .attributeExchange(".myopenid.com.")
        .attribute("email")
         .type("http://schema.openid.net/contact/email")
         .required(true)
         .and()
        .attribute("fullname")
         .type("http://schema.openid.net/namePerson")
         .required(true);
   }
  }
  
  public class AutoProvisioningUserDetailsService implements
    AuthenticationUserDetailsService&lt;OpenIDAuthenticationToken&gt; {
   public UserDetails loadUserDetails(OpenIDAuthenticationToken token) throws UsernameNotFoundException {
    return new User(token.getName(), "NOTUSED", AuthorityUtils.createAuthorityList("ROLE_USER"));
   }
  }

增加響應(yīng)安全報(bào)文頭

默認(rèn)情況下當(dāng)使用WebSecuirtyConfigAdapter的默認(rèn)構(gòu)造函數(shù)時(shí)激活。

僅觸發(fā)Headers()方法而不觸發(fā)其它方法或者接受WebSecurityConfigureerAdater默認(rèn)的,等同于:

@Configuration
  @EnableWebSecurity
  public class CsrfSecurityConfig extends WebSecurityConfigurerAdapter {
   @Override
   protected void configure(HttpSecurity http) throws Exception {
    http
     .headers()
      .contentTypeOptions();
      .xssProtection()
      .cacheControl()
      .httpStrictTransportSecurity()
      .frameOptions()
      .and()
     ...;
   }
  }

取消安全報(bào)文頭,如下:

  @Configuration
  @EnableWebSecurity
  public class CsrfSecurityConfig extends WebSecurityConfigurerAdapter {
  
   @Override
   protected void configure(HttpSecurity http) throws Exception {
    http
     .headers().disable()
     ...;
   }
  }

使用部分安全報(bào)文頭

觸發(fā)headers()方法的返回結(jié)果,例如,只使用HeaderConfigurer的cacheControll()方法和HeadersConfigurer的frameOptions()方法.

  @Configuration
  @EnableWebSecurity
  public class CsrfSecurityConfig extends WebSecurityConfigurerAdapter {
  
   @Override
   protected void configure(HttpSecurity http) throws Exception {
    http
     .headers()
      .cacheControl()
      .frameOptions()
      .and()
     ...;
   }
  }

配置session管理

下面的配置展示了只允許認(rèn)證用戶在同一時(shí)間只有一個(gè)實(shí)例是如何配置的。若一個(gè)用戶使用用戶名為"user"認(rèn)證并且沒(méi)有退出,同一個(gè)名為“user”的試圖再次認(rèn)證時(shí),第一個(gè)用戶的session將會(huì)強(qiáng)制銷毀,并設(shè)置到"/login?expired"的url。

  @Configuration
  @EnableWebSecurity
  public class SessionManagementSecurityConfig extends
    WebSecurityConfigurerAdapter {
  
   @Override
   protected void configure(HttpSecurity http) throws Exception {
    http
     .authorizeRequests()
      .anyRequest().hasRole("USER")
      .and()
     .formLogin()
      .permitAll()
      .and()
     .sessionManagement()
      .maximumSessions(1)
      .expiredUrl("/login?expired");
   }
  
   @Override
   protected void configure(AuthenticationManagerBuilder auth)
     throws Exception {
    auth.
     inMemoryAuthentication()
      .withUser("user")
       .password("password")
       .roles("USER");
   }
  }

當(dāng)使用SessionManagementConfigurer的maximumSessio(int)時(shí)不用忘記為應(yīng)用配置HttpSessionEventPublisher,這樣能保證過(guò)期的session能夠被清除。

在web.xml中可以這樣配置:

  <listener>
   <listener-class>org.springframework.security.web.session.HttpSessionEventPublisher</listener-class>;
  </listener>

配置PortMapper

允許配置一個(gè)從HttpSecurity的getSharedObject(Class)方法中獲取的PortMapper。當(dāng)http請(qǐng)求跳轉(zhuǎn)到https或者h(yuǎn)ttps請(qǐng)求跳轉(zhuǎn)到http請(qǐng)求時(shí)(例如我們和requiresChanenl一起使用時(shí)),別的提供的SecurityConfigurer對(duì)象使用P誒賬戶的PortMapper作為默認(rèn)的PortMapper。默認(rèn)情況下,spring security使用PortMapperImpl來(lái)映射http端口8080到https端口8443,并且將http端口的80映射到https的端口443.

配置示例如下,下面的配置將確保在spring security中的http請(qǐng)求端口9090跳轉(zhuǎn)到https端口9443 并且將http端口80跳轉(zhuǎn)到https443端口。

  @Configuration
  @EnableWebSecurity
  public class PortMapperSecurityConfig extends WebSecurityConfigurerAdapter {
  
   @Override
   protected void configure(HttpSecurity http) throws Exception {
    http
     .authorizeRequests()
      .antMatchers("/").hasRole("USER")
      .and()
     .formLogin()
      .permitAll()
      .and()
      // Example portMapper() configuration
      .portMapper()
       .http(9090).mapsTo(9443)
       .http(80).mapsTo(443);
   }
  
   @Override
   protected void configure(AuthenticationManagerBuilder auth) throws Exception {
    auth
     .inMemoryAuthentication()
      .withUser("user")
       .password("password")
       .roles("USER");
   }
  }

配置基于容器的預(yù)認(rèn)證

在這個(gè)場(chǎng)景中,servlet容器管理認(rèn)證。

配置示例:

下面的配置使用HttpServletRequest中的principal,若用戶的角色是“ROLE_USER”或者"ROLE_ADMIN",將會(huì)返回Authentication結(jié)果。

 @Configuration
  @EnableWebSecurity
  public class JeeSecurityConfig extends WebSecurityConfigurerAdapter {
  
   @Override
   protected void configure(HttpSecurity http) throws Exception {
    http
     .authorizeRequests()
      .antMatchers("/").hasRole("USER")
      .and()
     // Example jee() configuration
     .jee()
      .mappableRoles("ROLE_USER", "ROLE_ADMIN");
   }
  }

開(kāi)發(fā)者希望使用基于容器預(yù)認(rèn)證時(shí),需要在web.xml中配置安全限制。例如:

 <login-config>
   <auth-method>FORM</auth-method>
   <form-login-config>
    <form-login-page>/login</form-login-page>
    <form-error-page>/login?error</form-error-page>
   </form-login-config>
  </login-config>
  
  <security-role>
   <role-name>ROLE_USER</role-name>
  </security-role>
  <security-constraint>
   <web-resource-collection>
   <web-resource-name>Public</web-resource-name>
    <description>Matches unconstrained pages</description>
    <url-pattern>/login</url-pattern>
    <url-pattern>/logout</url-pattern>
    <url-pattern>/resources/</url-pattern>
   </web-resource-collection>
  </security-constraint>
  <security-constraint>
   <web-resource-collection>
    <web-resource-name>Secured Areas</web-resource-name>
    <url-pattern>/</url-pattern>
   </web-resource-collection>
   <auth-constraint>
    <role-name>ROLE_USER</role-name>
   </auth-constraint>
  </security-constraint>

配置基于X509的預(yù)認(rèn)證

配置示例,下面的配置試圖從X509證書(shū)中提取用戶名,注意,為完成這個(gè)工作,客戶端請(qǐng)求證書(shū)需要配置到servlet容器中。

  @Configuration
  @EnableWebSecurity
  public class X509SecurityConfig extends WebSecurityConfigurerAdapter {
  
   @Override
   protected void configure(HttpSecurity http) throws Exception {
    http
     .authorizeRequests()
      .antMatchers("/").hasRole("USER")
      .and()
     // Example x509() configuration
     .x509();
   }
  }

配置Remember-me服務(wù)

配置示例,下面的配置展示了如何允許基于token的remember-me的認(rèn)證。若http參數(shù)中包含一個(gè)名為“remember-me”的參數(shù),不管session是否過(guò)期,用戶記錄將會(huì)被記保存下來(lái)。

 @Configuration
  @EnableWebSecurity
  public class RememberMeSecurityConfig extends WebSecurityConfigurerAdapter {
  
   @Override
   protected void configure(AuthenticationManagerBuilder auth)
     throws Exception {
    auth
     .inMemoryAuthentication()
      .withUser("user")
        .password("password")
        .roles("USER");
   }
  
   @Override
   protected void configure(HttpSecurity http) throws Exception {
    http
     .authorizeRequests()
      .antMatchers("/").hasRole("USER")
      .and()
     .formLogin()
      .permitAll()
      .and()
     // Example Remember Me Configuration
     .rememberMe();
   }
  }

限制HttpServletRequest的請(qǐng)求訪問(wèn)

配置示例,最基本的示例是配置所有的url訪問(wèn)都需要角色"ROLE_USER".下面的配置要求每一個(gè)url的訪問(wèn)都需要認(rèn)證,并且授權(quán)訪問(wèn)權(quán)限給用戶"admin"和"user".

@Configuration
  @EnableWebSecurity
  public class AuthorizeUrlsSecurityConfig extends WebSecurityConfigurerAdapter {
  
   @Override
   protected void configure(HttpSecurity http) throws Exception {
    http
     .authorizeRequests()
      .antMatchers("/").hasRole("USER")
      .and()
     .formLogin();
   }
  
   @Override
   protected void configure(AuthenticationManagerBuilder auth)
     throws Exception {
    auth
     .inMemoryAuthentication()
      .withUser("user")
        .password("password")
        .roles("USER")
        .and()
      .withUser("adminr")
        .password("password")
        .roles("ADMIN","USER");
   }
  }

同樣,也可以配置多個(gè)url。下面的配置要求以/admin/開(kāi)始的url訪問(wèn)權(quán)限為“admin”用戶。

@Configuration
  @EnableWebSecurity
  public class AuthorizeUrlsSecurityConfig extends WebSecurityConfigurerAdapter {
  
   @Override
   protected void configure(HttpSecurity http) throws Exception {
    http
     .authorizeRequests()
      .antMatchers("/admin/**").hasRole("ADMIN")
      .antMatchers("/**").hasRole("USER")
      .and()
     .formLogin();
   }
  
   @Override
   protected void configure(AuthenticationManagerBuilder auth)
     throws Exception {
    auth
     .inMemoryAuthentication()
      .withUser("user")
        .password("password")
        .roles("USER")
        .and()
      .withUser("adminr")
        .password("password")
        .roles("ADMIN","USER");
   }
  }

注意:匹配起效是按照順序來(lái)的。因此如果下面的配置是無(wú)效的,因?yàn)闈M足第一個(gè)規(guī)則后將不會(huì)檢查第二條規(guī)則:

  http
   .authorizeRequests()
    .antMatchers("/**").hasRole("USER")
    .antMatchers("/admin/**").hasRole("ADMIN")

增加CSRF支持

默認(rèn)情況下,當(dāng)使用WebSecurityConfigurerAdapter時(shí)的默認(rèn)構(gòu)造方法時(shí)CSRF是激活的。你可以使用如下方法關(guān)閉它:

  @Configuration
  @EnableWebSecurity
  public class CsrfSecurityConfig extends WebSecurityConfigurerAdapter {
  
   @Override
   protected void configure(HttpSecurity http) throws Exception {
    http
     .csrf().disable()
     ...;
   }
  }

增加logout支持

默認(rèn)支持,當(dāng)使用WebSecurityConfigurerAdapter時(shí)Logout是支持的。當(dāng)用戶發(fā)出“/logout”請(qǐng)求時(shí),系統(tǒng)將會(huì)銷毀session并且清空配置的rememberMe()認(rèn)證,然后清除SecurityContextHolder,最后跳向logout成功頁(yè)面或者登陸頁(yè)面。

 @Configuration
  @EnableWebSecurity
  public class LogoutSecurityConfig extends WebSecurityConfigurerAdapter {
  
   @Override
   protected void configure(HttpSecurity http) throws Exception {
    http
     .authorizeRequests()
      .antMatchers("/").hasRole("USER")
      .and()
     .formLogin()
      .and()
     // sample logout customization
     .logout()
      .logout()
       .deleteCookies("remove")
       .invalidateHttpSession(false)
       .logoutUrl("/custom-logout")
       .logoutSuccessUrl("/logout-success");
   }
  
   @Override
   protected void configure(AuthenticationManagerBuilder auth)
     throws Exception {
    auth
     .inMemoryAuthentication()
      .withUser("user")
        .password("password")
        .roles("USER");
   }
  }

匿名用戶控制

使用WebSecurityConfigurerAdapter時(shí)自動(dòng)綁定。默認(rèn)情況下,匿名用戶有一個(gè)AnonymousAuthenticationToken標(biāo)示,包含角色"ROLE_ANONYMOUS"。

下面的配置展示了如何指定匿名用戶應(yīng)該包含"ROLE_ANON".

    @Configuration
  @EnableWebSecurity
  public class AnononymousSecurityConfig extends WebSecurityConfigurerAdapter {
  
   @Override
   protected void configure(HttpSecurity http) throws Exception {
    http
     .authorizeRequests()
      .antMatchers("/").hasRole("USER")
      .and()
     .formLogin()
      .and()
     // sample anonymous customization
     .anonymous()
      .authorities("ROLE_ANON");
   }
  
   @Override
   protected void configure(AuthenticationManagerBuilder auth)
     throws Exception {
    auth
     .inMemoryAuthentication()
      .withUser("user")
        .password("password")
        .roles("USER");
   }
  }

基于表單的認(rèn)證

若FormLoginConfigurer的loginpage(String)沒(méi)有指定,將會(huì)產(chǎn)生一個(gè)默認(rèn)的login頁(yè)面。

示例配置:

@Configuration
  @EnableWebSecurity
  public class FormLoginSecurityConfig extends WebSecurityConfigurerAdapter {
  
   @Override
   protected void configure(HttpSecurity http) throws Exception {
    http
     .authorizeRequests()
      .antMatchers("/**").hasRole("USER")
      .and()
     .formLogin();
   }
  
   @Override
   protected void configure(AuthenticationManagerBuilder auth)
     throws Exception {
    auth
     .inMemoryAuthentication()
      .withUser("user")
        .password("password")
        .roles("USER");
   }
  }

下面的示例展示了自定義的表單認(rèn)證:

 @Configuration
  @EnableWebSecurity
  public class FormLoginSecurityConfig extends WebSecurityConfigurerAdapter {
  
   @Override
   protected void configure(HttpSecurity http) throws Exception {
    http
     .authorizeRequests()
      .antMatchers("/").hasRole("USER")
      .and()
     .formLogin()
       .usernameParameter("j_username") // default is username
       .passwordParameter("j_password") // default is password
       .loginPage("/authentication/login") // default is /login with an HTTP get
       .failureUrl("/authentication/login?failed") // default is /login?error
       .loginProcessingUrl("/authentication/login/process"); // default is /login with an HTTP post
   }
  
   @Override
   protected void configure(AuthenticationManagerBuilder auth)
     throws Exception {
    auth
     .inMemoryAuthentication()
      .withUser("user")
        .password("password")
        .roles("USER");
   }
  }

配置安全通道

為使配置生效,需至少配置一個(gè)通道的映射。

配置示例:

下面例子展示了如何將每個(gè)請(qǐng)求都使用https通道。

 @Configuration
  @EnableWebSecurity
  public class ChannelSecurityConfig extends WebSecurityConfigurerAdapter {
  
   @Override
   protected void configure(HttpSecurity http) throws Exception {
    http
     .authorizeRequests()
      .antMatchers("/**").hasRole("USER")
      .and()
     .formLogin()
      .and()
     .channelSecurity()
      .anyRequest().requiresSecure();
   }
  
   @Override
   protected void configure(AuthenticationManagerBuilder auth)
     throws Exception {
    auth
     .inMemoryAuthentication()
      .withUser("user")
        .password("password")
        .roles("USER");
   }
  }

配置http 基本認(rèn)證

配置示例:

 @Configuration
  @EnableWebSecurity
  public class HttpBasicSecurityConfig extends WebSecurityConfigurerAdapter {
  
   @Override
   protected void configure(HttpSecurity http) throws Exception {
    http
     .authorizeRequests()
      .antMatchers("/**").hasRole("USER").and()
      .httpBasic();
   }
  
   @Override
   protected void configure(AuthenticationManagerBuilder auth)
     throws Exception {
    auth
     .inMemoryAuthentication()
      .withUser("user")
       .password("password")
       .roles("USER");
   }
  }

配置要觸發(fā)的HttpRequest

重寫(xiě)RequestMatcher方法、antMatcher()z、regexMatcher()等。

配置示例

下面的配置使HttpSecurity接收以"/api/","/oauth/"開(kāi)頭請(qǐng)求。

 @Configuration
  @EnableWebSecurity
  public class RequestMatchersSecurityConfig extends WebSecurityConfigurerAdapter {
  
   @Override
   protected void configure(HttpSecurity http) throws Exception {
    http
     .requestMatchers()
      .antMatchers("/api/**","/oauth/**")
      .and()
     .authorizeRequests()
      .antMatchers("/**").hasRole("USER").and()
      .httpBasic();
   }
  
   @Override
   protected void configure(AuthenticationManagerBuilder auth)
     throws Exception {
    auth
     .inMemoryAuthentication()
      .withUser("user")
       .password("password")
       .roles("USER");
   }
  }

下面的配置和上面的相同:

@Configuration
  @EnableWebSecurity
  public class RequestMatchersSecurityConfig extends WebSecurityConfigurerAdapter {
  
   @Override
   protected void configure(HttpSecurity http) throws Exception {
    http
     .requestMatchers()
      .antMatchers("/api/**")
      .antMatchers("/oauth/**")
      .and()
     .authorizeRequests()
      .antMatchers("/**").hasRole("USER").and()
      .httpBasic();
   }
  
   @Override
   protected void configure(AuthenticationManagerBuilder auth)
     throws Exception {
    auth
     .inMemoryAuthentication()
      .withUser("user")
       .password("password")
       .roles("USER");
   }
  }

同樣也可以這樣使用:

@Configuration
  @EnableWebSecurity
  public class RequestMatchersSecurityConfig extends WebSecurityConfigurerAdapter {
  
   @Override
   protected void configure(HttpSecurity http) throws Exception {
    http
     .requestMatchers()
      .antMatchers("/api/**")
      .and()
     .requestMatchers()
      .antMatchers("/oauth/**")
      .and()
     .authorizeRequests()
      .antMatchers("/**").hasRole("USER").and()
      .httpBasic();
   }
  
   @Override
   protected void configure(AuthenticationManagerBuilder auth)
     throws Exception {
    auth
     .inMemoryAuthentication()
      .withUser("user")
       .password("password")
       .roles("USER");
   }
  }

小結(jié):

本文是從httpSecurity代碼中整理得來(lái)的,有助于對(duì)spring security的全面理解。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • java中JDBC增刪改查操作詳解

    java中JDBC增刪改查操作詳解

    大家好,本篇文章主要講的是java中JDBC增刪改查操作詳解,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • IDEA maven compile報(bào)錯(cuò)OutOfMemoryError(內(nèi)存溢出)解決及jvm分析

    IDEA maven compile報(bào)錯(cuò)OutOfMemoryError(內(nèi)存溢出)解決及jvm分析

    遇到Maven編譯時(shí)報(bào)OutOfMemoryError錯(cuò)誤通常因?yàn)槟J(rèn)的堆內(nèi)存大小不足,本文就來(lái)介紹一下OutOfMemoryError(內(nèi)存溢出)解決,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-10-10
  • eclipse實(shí)現(xiàn)可認(rèn)證的DH密鑰交換協(xié)議

    eclipse實(shí)現(xiàn)可認(rèn)證的DH密鑰交換協(xié)議

    這篇文章主要介紹了eclipse實(shí)現(xiàn)可認(rèn)證的DH密鑰交換協(xié)議,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • Java接口和抽象類實(shí)現(xiàn)抽象和多態(tài)的方法示例

    Java接口和抽象類實(shí)現(xiàn)抽象和多態(tài)的方法示例

    接口和抽象類是 Java 中兩種實(shí)現(xiàn)抽象和多態(tài)的方法。它們之間有一些區(qū)別,但也有一些相似之處。這一節(jié)我們將通過(guò)詳細(xì)的例子來(lái)更深入地了解接口和抽象類
    2023-05-05
  • 集成apollo動(dòng)態(tài)日志取締logback-spring.xml配置

    集成apollo動(dòng)態(tài)日志取締logback-spring.xml配置

    這篇文章主要為大家介紹了集成apollo動(dòng)態(tài)日志取締logback-spring.xml配置的過(guò)程內(nèi)容詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2022-02-02
  • springBoot mybatis 包掃描實(shí)例

    springBoot mybatis 包掃描實(shí)例

    這篇文章主要介紹了springBoot mybatis 包掃描實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Java結(jié)構(gòu)型設(shè)計(jì)模式中代理模式示例詳解

    Java結(jié)構(gòu)型設(shè)計(jì)模式中代理模式示例詳解

    代理模式(Proxy Parttern)為一個(gè)對(duì)象提供一個(gè)替身,來(lái)控制這個(gè)對(duì)象的訪問(wèn),即通過(guò)代理對(duì)象來(lái)訪問(wèn)目標(biāo)對(duì)象。本文將通過(guò)示例詳細(xì)講解一下這個(gè)模式,需要的可以參考一下
    2022-09-09
  • Java應(yīng)用CPU使用率過(guò)高排查方式

    Java應(yīng)用CPU使用率過(guò)高排查方式

    這篇文章主要介紹了Java應(yīng)用CPU使用率過(guò)高排查方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • ReentrantLock重入鎖底層原理示例解析

    ReentrantLock重入鎖底層原理示例解析

    這篇文章主要為大家介紹了ReentrantLock重入鎖底層原理示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • JAVA十大排序算法之希爾排序詳解

    JAVA十大排序算法之希爾排序詳解

    這篇文章主要介紹了java中的希爾排序,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-08-08

最新評(píng)論

奉化市| 班玛县| 娄底市| 中阳县| 社旗县| 寻乌县| 民乐县| 靖安县| 铁岭市| 巴彦淖尔市| 德庆县| 和硕县| 格尔木市| 新源县| 伊宁市| 霍林郭勒市| 抚宁县| 安乡县| 迁安市| 韶山市| 德昌县| 宜兰市| 黄龙县| 清丰县| 盐津县| 安多县| 连平县| 军事| 北海市| 科技| 牡丹江市| 达拉特旗| 洪泽县| 边坝县| 武鸣县| 沾益县| 松溪县| 新龙县| 增城市| 鹰潭市| 韶关市|