欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringSecurity微服務(wù)實戰(zhàn)之公共模塊詳解

 更新時間:2022年08月26日 14:21:58   作者:青衣畫白扇  
這篇文章主要為大家介紹了SpringSecurity微服務(wù)實戰(zhàn)之公共模塊詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

前言

在項目中安全框架是必不可少的,在微服務(wù)架構(gòu)中更是尤為重要,我們項目中將安全模塊單獨抽離了一個公共模塊出來,因為在我的項目架構(gòu)中 需要用到的SpringSecurity 至少有三個地方 boss服務(wù) admin服務(wù) user服務(wù)(saas)模式的一個微服務(wù)架構(gòu)

模塊結(jié)構(gòu)

主要分為 base服務(wù)(提供數(shù)據(jù),可以部署多份進(jìn)行負(fù)載均衡) boss模塊 admin模塊 gateway模塊 以及公共模塊其中就包含我們今天的主角 安全模塊。

我們在TokenLoginFilter中繼承 AbstractAuthenticationProcessingFilter抽象類 重寫 attemptAuthentication方法 在里面分別指定驗證器

@Override
public Authentication attemptAuthentication(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws AuthenticationException, IOException, ServletException {
    if (!httpServletRequest.getMethod().equals("POST")) {
        throw new AuthenticationServiceException(
                "Authentication method not supported: " + httpServletRequest.getMethod());
    }
    User user = new ObjectMapper().readValue( httpServletRequest.getInputStream(), User.class);
    //處理驗證碼
    AbstractAuthenticationToken authRequest = null;
    switch(user.getType()) {
        //租戶登錄
        case "1":
            authRequest = new TenantAuthenticationToken(user.getUsername(), user.getPassword());
            break;
        //平臺登錄
        case "2":
            authRequest = new UsernamePasswordAuthenticationToken(user.getUsername(), user.getPassword());
            break;
    }
    setDetails(httpServletRequest, authRequest);
    return this.getAuthenticationManager().authenticate(authRequest);
}

其中TenantDetailsAuthenticationProvider租戶驗證器(admin) 和UsernamePasswordAuthenticationProvider 平臺驗證器(boss)

這里當(dāng)然還可以再加其他的驗證器,比如后面如果還有app的話就可以在配置一個專門來做app端權(quán)限驗證的驗證器。

下面我們看看令牌的續(xù)期是怎么實現(xiàn)的: 令牌是由jwt生成 和 redis 配合使用,每一次親求進(jìn)來檢查token是否合法的同時校驗一下token的剩余時間是否大于一個閾值,如果小于閾值我們進(jìn)行reids 中的令牌刷新時間讓用戶無感知續(xù)約。

/**
 * 驗證令牌有效期,相差不足20分鐘,自動刷新緩存
 * @param loginUser
 * @return 令牌
 */
public void verifyToken(OnlineUserInfo loginUser,Integer type)
{
    long expireTime = loginUser.getExpireTime();
    long currentTime = System.currentTimeMillis();
     long chazhu= expireTime - currentTime;
    if (chazhu <= MILLIS_MINUTE_TEN)
    {
        refreshToken(loginUser,type);
    }
}

在訪問過濾器中進(jìn)行校驗就可以了,這樣就可以做到用戶無感知令牌續(xù)約。

安全驗證模塊目前是再每個服務(wù)上面引入使用,后面會考慮在網(wǎng)關(guān)層做鑒權(quán)處理。

最后貼一下 WebSecurityConfigBugVip 這個配置類

@Configuration
@EnableWebSecurity
public class WebSecurityConfigBugVip extends WebSecurityConfigurerAdapter {
    private TokenManager tokenManager;
    @Autowired
    private TenantDetailsAuthenticationProvider userDetailsAuthenticationProvider;
    @Autowired
    private UsernamePasswordAuthenticationProvider usernamePasswordAuthenticationProvider;
    @Autowired
    @Qualifier("authenticationManagerBean")
    private AuthenticationManager authenticationManager;
    /**
     * 裝配自定義的Provider
     * @param auth
     */
    @Override
    public void configure(AuthenticationManagerBuilder auth){
        auth.authenticationProvider(userDetailsAuthenticationProvider);//將我們自定義的認(rèn)證器配置進(jìn)來
        auth.authenticationProvider(usernamePasswordAuthenticationProvider);//默認(rèn)的認(rèn)證器
    }
    @Autowired
    public WebSecurityConfigBugVip(TokenManager tokenManager, RedisTemplate redisTemplate) {
        this.tokenManager = tokenManager;
        this.redisTemplate = redisTemplate;
    }
    /**
     * 配置設(shè)置
     *
     * @param http
     * @throws Exception
     */
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.exceptionHandling()
                .authenticationEntryPoint(new UnauthorizedEntryPoint())
                .and().csrf().disable()
                .addFilterAt(tokenLoginFilter(), UsernamePasswordAuthenticationFilter.class)
                .authorizeRequests()//配置需要放行的請求
                .antMatchers("/swagger-ui.html/**","/v2/**","/webjars/**","/swagger-resources/**","/boss/verifi/getCode","/boss/verifi/checkVrrifyCode","/boss/sysuser/write","/boss/sysuser/read").permitAll()
                .anyRequest().authenticated()
                .and().logout().logoutUrl("/boss/acl/logout")
                .and().logout().logoutUrl("/admin/acl/logout")
                .addLogoutHandler(new TokenLogoutHandler(tokenManager, redisTemplate)).and()
                .addFilter(new TokenAuthenticationFilter(authenticationManager(), tokenManager, redisTemplate)).httpBasic();//設(shè)置訪問過濾器
    }
    /**
    *token過濾器
    */
    @Bean
    public TokenLoginFilter tokenLoginFilter() {
        TokenLoginFilter filter = new TokenLoginFilter();
        filter.setAuthenticationManager(authenticationManager);
        return filter;
    }
    /**
     * 處理注入 AuthenticationManager失敗問題
     * @return
     * @throws Exception
     */
    @Override
    @Bean
    public AuthenticationManager authenticationManagerBean() throws Exception {
        return super.authenticationManagerBean();
    }
}

以上就是SpringSecurity微服務(wù)實戰(zhàn)之公共模塊詳解的詳細(xì)內(nèi)容,更多關(guān)于SpringSecurity微服務(wù)公共模塊的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • SpringCloud?Gateway之請求應(yīng)答日志打印方式

    SpringCloud?Gateway之請求應(yīng)答日志打印方式

    這篇文章主要介紹了SpringCloud?Gateway之請求應(yīng)答日志打印方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Java之對象銷毀和finalize方法的使用

    Java之對象銷毀和finalize方法的使用

    這篇文章主要介紹了Java之對象銷毀和finalize方法的使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • Java定時任務(wù)的三種實現(xiàn)方式

    Java定時任務(wù)的三種實現(xiàn)方式

    這篇文章主要給大家介紹了關(guān)于Java定時任務(wù)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-01-01
  • Intellij IDEA十大快捷鍵

    Intellij IDEA十大快捷鍵

    Intellij IDEA中有很多快捷鍵讓人愛不釋手,stackoverflow上也有一些有趣的討論.這篇文章主要介紹了Intellij IDEA十大快捷鍵,需要的朋友可以參考下
    2018-03-03
  • java實現(xiàn)文件夾上傳功能實例代碼(SpringBoot框架)

    java實現(xiàn)文件夾上傳功能實例代碼(SpringBoot框架)

    在web項目中上傳文件夾現(xiàn)在已經(jīng)成為了一個主流的需求,下面這篇文章主要給大家介紹了關(guān)于java實現(xiàn)文件夾上傳功能(springBoot框架)的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-04-04
  • Java Elastic Job動態(tài)添加任務(wù)實現(xiàn)過程解析

    Java Elastic Job動態(tài)添加任務(wù)實現(xiàn)過程解析

    這篇文章主要介紹了Java Elastic Job動態(tài)添加任務(wù)實現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-08-08
  • SpringCloud如何實現(xiàn)Zuul集群(負(fù)載均衡)

    SpringCloud如何實現(xiàn)Zuul集群(負(fù)載均衡)

    這篇文章主要介紹了SpringCloud如何實現(xiàn)Zuul集群(負(fù)載均衡)的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Java中獲取文件大小的詳解及實例代碼

    Java中獲取文件大小的詳解及實例代碼

    這篇文章主要介紹了Java中獲取文件大小的詳解及實例代碼的相關(guān)資料,一種是使用File的length()方法,另外一種是使用FileInputStream的available()方法,這里就說下如何使用需要的朋友可以參考下
    2016-12-12
  • 基于Java實現(xiàn)的Base64加密、解密原理代碼

    基于Java實現(xiàn)的Base64加密、解密原理代碼

    這篇文章主要介紹了基于Java實現(xiàn)的Base64加密、解密原理代碼,需要的朋友可以參考下
    2014-07-07
  • Spring事務(wù)失效問題分析及解決方案

    Spring事務(wù)失效問題分析及解決方案

    這篇文章主要介紹了Spring事務(wù)失效問題分析及解決方案,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-01-01

最新評論