【Tencent Cloud Studio 実践トレーニングキャンプ】Cloud Studio を使用して SpringSecurity 権限フレームワークを構築する

画像の説明を追加してください

1. Cloud Studio (クラウド IDE) の概要

Cloud Studio は、開発者に常時接続のクラウドベースのワークステーションを提供する、ブラウザベースの統合開発環境 (IDE) です。ユーザーはCloud Studioを利用する際にインストールする必要がなく、ブラウザを開いていつでもどこでもオンラインでプログラミングが可能です。

オンライン IDE として、Cloud Studio には、コードのハイライト表示、オートコンプリート、Git 統合、ターミナルなどの基本的な IDE 機能が含まれており、リアルタイム デバッグ、プラグイン拡張機能などもサポートしているため、開発者は開発を迅速に完了できます。 、さまざまなアプリケーションのコンパイル、展開。

Cloud IDE (Web IDE/Online IDE/Cloud IDE) は、クラウド上でホストされるサービスとして動作し、単なるクラウド上のソフトウェア開発環境ではなく、インフラストラクチャサービスを含む開発環境をサービスとして提供します。このモードには当然次のような利点があります。

  • プロジェクトをローカルで保守およびセットアップする必要はありません。
  • より良い共有とコラボレーション。
  • クラウド サービスへの直接統合/アクセス。
  • コンテキスト切り替え (異なるプロジェクト、ブランチなど) の方法と効率を改善します。
  • ソースコードの一元管理と機密保持。

クラウド コンピューティング テクノロジーの成熟と普及に伴い、ミドルウェアやデータベースなどの水平機能サービス コンポーネントから、顔認識や認証サービスなどの基本的なビジネス サービスに至るまで、従来のプログラミング機能やリソースがクラウド サービスの形で公開されることが増えています。クラウドで簡単に利用できます。世界が IaaS ベースのアプリケーション開発から、IaaS、PaaS、さらには SaaS に基づくハイブリッド アプリケーション開発モデルに変化すると、クラウド IDE (Web IDE/オンライン IDE/クラウド IDE) は、開発者のすべてのサービス コンポーネントを接続するための最良の方法となるでしょう。 、PaaS、SaaS クラウド サービス。良い選択です。

Cloud Studio には、一般的に使用される言語テンプレートが多数用意されています。フロントエンド、バックエンド、アルゴリズム、フルスタックの開発者であっても、Cloud Studio では自分に合った言語テンプレートを見つけることができます。
ここに画像の説明を挿入
同時に、Cloud Studio は、AI チャット、テトリス、言語翻訳などを含む数十のテンプレート アプリケーションも提供します。さまざまなアプリケーションをすぐに使用でき、Cloud Studio は豊富なアプリケーション エコシステムも提供し、開発者はいつでも優れたアイデアを送信できます。
ここに画像の説明を挿入

2. 応用シナリオ

Cloud Studio オンライン プログラミング ツールは、次のシナリオに適しています。

2.1 クイックスタートプロジェクト

Cloud Studio のプリセット環境を使用すると、面倒な環境設定を行わずに、対応するタイプのワークスペースを直接作成し、プロジェクトを迅速に開始して開発状態に入ることができます。

2.2 リアルタイム デバッグ Web ページ

Cloud Studio には、Web アプリケーションをリアルタイムで表示できるプレビュー プラグインが組み込まれています。コードが変更されると、プレビュー ウィンドウが自動的に更新されるため、Cloud Studio でリアルタイムでウェブページの開発とデバッグを行うことができます。

2.3 クラウドサーバーへのリモートアクセス

Cloud Studio は、独自のクラウド サーバーへの接続をサポートしているため、エディターでクラウド サーバー上のファイルを表示し、オンライン プログラミングとデプロイメントを実行できます。

2.4 開発の支援

ホーム オフィスのシナリオでは、困難な問題が発生した場合、他のチーム メンバーと連携して問題を分析し、一緒に解決できます。

2.5 開発プロセス

コミュニケーション、調整、トラブルシューティング、レビュー、テストという一連の開発プロセスを提供し、ユーザーは業務開発だけに集中できます。

2.6 強力な Devops エコロジー

git プラットフォーム コーディング + Tencent Cloud Server + Cloud Studio と連携することで、中小企業は Devops エコシステムを簡単に実装し、低コストでクラウドに移行できます。

3. Spring Security の概要

Spring Security は Spring ベースの認証 (Authentication) およびユーザー認可 (Authorization) フレームワークであり、Web アプリケーションのセキュリティのための完全なソリューションを提供します。これは、市場でエンタープライズ レベルのセキュリティ フレームワークとして最適な選択肢です。

ID 認証とは、ユーザーがシステム リソースにアクセスするときに、システムがユーザーの ID 情報の検証を要求し、ユーザーの ID が正当である場合にのみ、対応するリソースにアクセスできることを意味します。共通 ID 認証では通常、ユーザーはユーザー名とパスワードを入力する必要があります。システムは、ユーザー名とパスワードを確認することで認証プロセスを完了します。

本人認証が通過した後、システムリソースにアクセスする際、システムはユーザーにリソースへのアクセス権限があるかどうかを判断し、権限のあるシステムリソースへのアクセスのみを許可し、権限のないリソースにはアクセスできなくなります。ユーザー認証。例えば、会員管理モジュールには、追加、削除、変更、確認の機能があり、問い合わせのみが可能なユーザもあれば、変更と削除も可能なユーザもいる。一般に、システムはさまざまなユーザーにさまざまな役割を割り当て、各役割は一連の権限に対応します。

平たく言えば、Spring Security は、アカウントのパスワードと、操作者がインターフェースにアクセスする権限を持っているかどうかを検証する機能を提供します。

4 クイックスタートプロジェクト

ここでは、Cloud Studio を使用して Spring Security プロジェクトを迅速に開始します。

4.1 新しい名前空間を作成する

以下に 2 つの方法があります。

  1. 新しい空のワークスペースを作成し、ブログ投稿に従ってプロジェクトの構築を完了できます。
  2. コーディングを通じてプロジェクトをインポートすることもできます。プロジェクト アドレス: https://e.coding.net/bcl3/spring/CloudStudioSecurity.git

コード構造は次のとおりです。
ここに画像の説明を挿入

4.2 新しいエンティティクラスの作成

ここでは、一般的な戻りメソッドと項目エンティティ クラスが提供されます。

スペースの都合上、get/setメソッドはここでは提供しておりませんので、ソースコードが必要な場合は、コーディングを使用してダウンロードしてください。

4.2.1 認証

このクラスは、Application.yml で提供される定数を受け取ります。

@ConfigurationProperties(prefix = "authentication")
@Component
public class Authentication {
    
    

    private String loginPage;
    private String loginProcessingUrl;
    private String username;
    private String password;
    private String[] staticPaths ;

4.2.2 結果

統一された戻り形式を提供するために使用されます。

public class Result {
    
    

    private Integer code;

    private String message;

    private Object data;

4.3 サービス

UserService クラスは、アカウント パスワードをクエリし、アカウント パスワードが正しいかどうかを検証します。ここではデータベースへの接続はなく、シミュレートされたクエリ検証のみが提供されます。これをベースに拡張できます。

@Component("userService")
public class UserService implements UserDetailsService {
    
    
    Logger logger = LoggerFactory.getLogger(getClass());

    /**
     * spring提供的加密算法,该算法只能验证不能解密
     */
    @Autowired
    PasswordEncoder passwordEncoder;

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
    
    
        logger.info("输入的账号: " + username);
        if(!"CloudStudio".equalsIgnoreCase(username)) {
    
    
            throw new UsernameNotFoundException("用户名或密码错误");
        }
        String password = passwordEncoder.encode("1234");
        //模拟返回权限
        return new User(username, password, AuthorityUtils.commaSeparatedStringToAuthorityList("admin"));
    }
}

4.4 Spring Security Config (コア)

このクラスは Spring Security のコア クラスです。

  1. configure(AuthenticationManagerBuilder auth): このメソッドは、アカウントのパスワードを検証する方法を指定するために使用されます。つまり、上記の UserService を呼び出します。
  2. configure(WebSecurity web): 静的リソースを解放するために使用されます。静的リソースはアカウントを検証する必要がありません。
  3. configure(HttpSecurity http): どのインターフェースでアカウントを認証するか、どのインターフェースに匿名でアクセスできるかを設定し、同時にカスタムフィルターも指定可能 ここでは、認証の成功/失敗を処理するために AuthenticationSuccessHandler /AuthenticationFailureHandler を指定します。同時に、ここで検証コード フィルター、トークン フィルターなどを追加することもできます。詳細な知識については、ブロガーの SpringSecurity/Oauth コラムを参照してください。
@Configuration
@EnableWebSecurity
public class SpringSecurityConfig extends WebSecurityConfigurerAdapter {
    
    

    @Autowired
    UserDetailsService userDetailsService;

    @Autowired
    private AuthenticationSuccessHandler customAuthenticationSuccessHandler;

    @Autowired
    private AuthenticationFailureHandler customAuthenticationFailureHandler;

    @Autowired
    private Authentication authentication;

    @Bean
    public PasswordEncoder passwordEncoder() {
    
    
        return new BCryptPasswordEncoder();
    }

    /**
     * 加入验证用户的service
     * @param auth
     * @throws Exception
     */
    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
    
    
        auth.userDetailsService(userDetailsService);
    }

    /**
     * 核心方法,配置什么方法可以不通过鉴权就能访问,并指定一系列的过滤器
     *
     * @param http
     * @throws Exception
     */
    @Override
    protected void configure(HttpSecurity http) throws Exception {
    
    
        // 表单登录方式
        http.formLogin()
            .loginPage(authentication.getLoginPage())
            // 登录表单提交处理url, 默认是/login
            .loginProcessingUrl(authentication.getLoginProcessingUrl())
            //验证账号
            .usernameParameter(authentication.getUsername())
            //验证密码
            .passwordParameter(authentication.getPassword())
            //指定访问成功/失败的处理类
            .successHandler(customAuthenticationSuccessHandler)
            .failureHandler(customAuthenticationFailureHandler)
            .and()
            .authorizeRequests()
            ///login/page所有人都能访问,要不没法登录
            .antMatchers(authentication.getLoginPage()).permitAll()
            //其余接口必须验证用户才能访问
            .anyRequest().authenticated()
        ;
    }

    /**
     * 静态资源不需要鉴权
     * @param web
     */
    @Override
    public void configure(WebSecurity web){
    
    
        web.ignoring().antMatchers("/dist/**", "/modules/**", "/plugins/**");
    }
}

4.5 CustomAuthenticationSuccessHandler /CustomAuthenticationFailureHandler

検証が成功または失敗した場合にこのクラスを呼び出します 現在の開発はフロントエンドとバックエンドに分かれているため、フロントエンドはバックエンドに合わせて処理ロジックを返す必要がありますが、ここではjsonリターンを提供するように構成しています。このクラスを削除すると、ジャンプ ページではなくページで例外がスローされます。

@Component("customAuthenticationSuccessHandler")
public class CustomAuthenticationSuccessHandler implements AuthenticationSuccessHandler {
    
    

    @Override
    public void onAuthenticationSuccess(HttpServletRequest request,
        HttpServletResponse response, Authentication authentication) throws IOException, ServletException {
    
    
        // 认证成功后,响应JSON字符串
        Result result = Result.ok("认证成功");
        //此处指定返回对象为json,也可以改为返回值
        response.setContentType("application/json;charset=UTF-8");
        response.getWriter().write(result.toJsonString());
    }
}

@Component("customAuthenticationFailureHandler")
public class CustomAuthenticationFailureHandler implements AuthenticationFailureHandler {
    
    

    @Override
    public void onAuthenticationFailure(HttpServletRequest request,
            HttpServletResponse response, AuthenticationException exception) throws IOException, ServletException {
    
    
        // 认证失败响应JSON字符串,
        Result result = Result.build(HttpStatus.UNAUTHORIZED.value(), exception.getMessage());
        //此处指定返回对象为json,也可以改为返回值
        response.setContentType("application/json;charset=UTF-8");
        response.getWriter().write(result.toJsonString());
    }
}

4.6 application.yml

Springboot 設定、設定ジャンプ ページなど。

server:
  port: 80
spring:
  thymeleaf:
    cache: false #关闭thymeleaf缓存
authentication:
  loginPage: /login/page
  loginProcessingUrl: /login/form # 登录表单提交处理的url
  username: name # 登录表单提交的用户名的属性名
  password: pwd  # 登录表单提交的密码的属性名
  staticPaths: # 静态页面放弃拦截
  - /dist/**
  - /modules/**
  - /plugins/**

4.7 コントローラー

コントローラーは外部アクセスの入り口となると同時にthymeleafのページにジャンプします。

@Controller
public class CustomLoginController {
    
    

    /**
     * 访问thymeleaf页面
     * @return
     */
    @RequestMapping("/login/page")
    public String toLogin() {
    
    
        return "login";
    }
}

@Controller
public class MainController {
    
    

    @RequestMapping({
    
    "/index", "/", ""})
    public String index() {
    
    
        return "index";
    }
}

4.7 検証

プロジェクトを開始した後、 にアクセスするlocalhostと、設定を介して /login/page にジャンプします。この時点ではログインを実行するだけです。
ここに画像の説明を挿入
アクセス成功/失敗時にページにジャンプして例外をスローするapplication/jsonこの戻りメソッドはフロントエンドとバックエンドの分離に適しており、フロントエンドはバックエンドを介して実行ロジックを返します。
ここに画像の説明を挿入

CustomAuthenticationSuccessHandler /CustomAuthenticationFailureHandler を削除すると、ページにジャンプするのではなく、ページ上で例外がスローされます。
ここに画像の説明を挿入

5. まとめ

現在、ブロガーは Cloud Studio を長期間経験しており、使用プロセス中に次のような見解を持っています。

  1. Cloud Studio には、多数の言語テンプレートが用意されています。フルスタックの愛好家で、時々 Python で遊んでみたい場合は、Cloud Studio を使用すると、さまざまな環境をインストールする必要がなく、すぐに使用できます。
  2. Cloud Studio は、Web IDE/オンライン IDE/クラウド IDE として、ローカル IDE と比較して次のような利点があります: インストール不要、クロスプラットフォーム、ブラウザさえあれば利用可能、共通環境があらかじめ設定されており、手動インストールが不要; Web ページのプレビュー作成のサポート、オンライン開発とデバッグ、コンピューター リソースの節約、Cloud Studio の実行速度はハードウェアに依存せず、何年も前の古いコンピューターでもスムーズに実行できます。
  3. 会場外の観客に協力を求める機能を提供し、さまざまなマスターを現場に招待して作業を行うことができます。
  4. クラウド展開キットを提供し、Tencent クラウド サービス + コーディング コード ウェアハウスと連携して、中小企業は簡単に Devops エコロジーを実装できます。
  5. 継続的な機能拡張やAIプログラミングなどを随時繰り返していきます。

使用中であっても、ブロガーはいくつかの提案をしたいと考えています。

  1. Cloud Studio のスタイルは現在 vs code に非常に近いため、バックエンドで idea を使用している人には馴染みがないかもしれませんが、将来的にはユーザーが選択できる複数のスタイルを提供できますか?
  2. プロジェクト構造を構成することはできず、バックエンドの親子依存関係プロジェクトの構築はより複雑になります。

最初の段階は Cloud Studio の無料トライアルです。古いユーザーの経験と新しいユーザーの開始コストに基づいて、Cloud Studio チームは実際に毎月 3000 分の無料作業スペースを提供します。詳細については、製品ドキュメント。皆さんも試してみてはいかがでしょうか?クリックしてください クリックしてください

おすすめ

転載: blog.csdn.net/qq_20143059/article/details/132008637