Security的登錄和註冊模塊

回顧

《引入Security遇到的問題》前文基本引入seciruy,就準備弄登錄和註冊模塊了
這裏有個問題,很久之前,我也打算吧seciruy當成一個模塊來弄,不過具體怎麼去弄,有點不清醒,之前的老項目jfun、或者jfun-cloud應該會有類似的問題

現在的處理方法

現在的處理方法在下圖模塊的基礎之上

mall-security
    	component
    	|--------------JwtAuthenticationTokenFilter JWT登錄授權過濾器
        |--------------RestAuthenticationEntryPoint 自定義返回結果:未登錄或登錄過期
        |--------------RestfulAccessDeniedHandler 自定義返回結果:沒有權限訪問時
        config
        |--------------IgnoreUrlsConfig用於配置不需要保護的資源路徑 如Swagger
        |—-------------SecurityConfig 對SpringSecurity的配置的擴展,支持自定義白名單資源路徑和查詢用戶邏輯
        util
        |--------------JwtTokenUtil JwtToken生成的工具類
  1. 主項目基礎seciruy配置類
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled=true)
public class MallSecurityConfig extends SecurityConfig {

    @Autowired
    private IUmsAdminService adminService;

    @Bean
    public UserDetailsService userDetailsService() {
        //獲取登錄用戶信息
        return username -> adminService.loadUserByUsername(username);
    }
}
  1. 建立一個服務類
public interface IUmsAdminService extends IService<UmsAdmin> {

    UmsAdmin register(UmsAdmin umsAdminParam);

    List<UmsPermission> getPermissionList(Long adminId);

    String login(String username, String password);

    UserDetails loadUserByUsername(String username);

    /**
     * 根據用戶名獲取後臺管理員
     */
    UmsAdmin getAdminByUsername(String username);
}

該方法需要用到loadUserByUsername

public class AdminUserDetails implements UserDetails {
    private UmsAdmin umsAdmin;
    private List<UmsPermission> permissionList;
    public AdminUserDetails(UmsAdmin umsAdmin, List<UmsPermission> permissionList) {
        this.umsAdmin = umsAdmin;
        this.permissionList = permissionList;
    }

    @Override
    public Collection<? extends GrantedAuthority> getAuthorities() {
        //返回當前用戶的權限
        return permissionList.stream()
                .filter(permission -> permission.getValue()!=null)
                .map(permission ->new SimpleGrantedAuthority(permission.getValue()))
                .collect(Collectors.toList());
    }

    @Override
    public String getPassword() {
        return umsAdmin.getPassword();
    }

    @Override
    public String getUsername() {
        return umsAdmin.getUsername();
    }

    @Override
    public boolean isAccountNonExpired() {
        return true;
    }

    @Override
    public boolean isAccountNonLocked() {
        return true;
    }

    @Override
    public boolean isCredentialsNonExpired() {
        return true;
    }

    @Override
    public boolean isEnabled() {
        return umsAdmin.getStatus().equals(1);
    }
}
  1. 注意問題
    ⚠️ 注意swagger的URL配置,就大功告成了
發佈了33 篇原創文章 · 獲贊 11 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章