yamabico-dailylog

SE兼アマチュアピアニストのブログです。

Homebrewで一苦労した話

現在使用しているMac Book Proは数年前に購入した Early 2015だ。
このモデルでは通常のOSアップデート操作で Serriraより上のOSバージョン(catalina,mojave)にアップデートできない状態にあったため、 App Storeより最新OSをダウンロードしアップデートを実施した。

アップデートを決めた要因は、
前述のSerriraより上のバージョンにあげられない問題や、
そもそも古いOSバージョンを使い続けているリスクと、
加えて、brewコマンドでJDK11など、
開発に関わる一部のライブラリのインストールができない問題が発生していたからだ。

brewコマンド実行でエラーが発生

OSのアップデートは無事完了したので、 早速JDK11をダウンロードすべくbrewコマンドを実行したところ、 以下のエラーが発生。

Error: 
  homebrew-core is a shallow clone.
  homebrew-cask is a shallow clone.
To `brew update`, first run:
  git -C /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core fetch --unshallow
  git -C /usr/local/Homebrew/Library/Taps/homebrew/homebrew-cask fetch --unshallow
These commands may take a few minutes to run due to the large size of the repositories.
This restriction has been made on GitHub's request because updating shallow
clones is an extremely expensive operation due to the tree layout and traffic of
Homebrew/homebrew-core and Homebrew/homebrew-cask. We don't do this for you
automatically to avoid repeatedly performing an expensive unshallow operation in
CI systems (which should instead be fixed to not use shallow clones). Sorry for
the inconvenience!

調べたところ同じ問題が発生した方のQiita記事を見つけた。 内容を読むとHomebrewの仕様に変更が入ったからとのこと。 qiita.com

brew caskでエラー発生

今回JDKAmazon correttoを利用することを考えた。 いくつかの記事を参考に以下のコマンドを実行したが、 caskがないとエラーになった。

brew cask install corretto

別の記事で、caskのインストールが必要と書かれていたので、 以下を実行したが、色々インストールされるものの、 肝心のbrew caskコマンドはエラーのまま。

brew install cask

これについて、原因が分からず結構時間を費やしてしまったが、 Homebrewの本家サイトを確認すると、

brew.sh

を確認すると、caskを利用するには以下のようにコマンドを書くよう記載があった。

brew install --cask {インストールしたいライブラリ・アプリケーション}

まさか、と思いつつ実際試してみると、無事成功・・・。 本家サイトみると大事ですね・・。

$ brew install --cask corretto
Updating Homebrew...
==> Auto-updated Homebrew!
Updated 1 tap (homebrew/core).
==> Updated Formulae
Updated 12 formulae.

==> Tapping homebrew/cask
Cloning into '/usr/local/Homebrew/Library/Taps/homebrew/homebrew-cask'...
remote: Enumerating objects: 34, done.
remote: Counting objects: 100% (34/34), done.
remote: Compressing objects: 100% (24/24), done.
remote: Total 549210 (delta 16), reused 14 (delta 10), pack-reused 549176
Receiving objects: 100% (549210/549210), 241.94 MiB | 4.55 MiB/s, done.
Resolving deltas: 100% (387876/387876), done.
Tapped 3814 casks (3,933 files, 259.6MB).
==> Downloading https://corretto.aws/downloads/resources/15.0.2.7.1/amazon-corre
######################################################################## 100.0%
==> Installing Cask corretto
==> Running installer for corretto; your password may be necessary.
Package installers may write to any location; options such as `--appdir` are ignored.
Password:
installer: Package name is Amazon Corretto 15
installer: Installing at base path /
installer: The install was successful.
🍺  corretto was successfully installed!

とはいえ、上記の通り、JDK15がインストールされてしまったので、 以下で過去バージョンのライブラリ・アプリケーションを取得できるようにし、

brew tap homebrew/cask-versions

correttoのJDK11を取得を実行し、無事完了することができた。

brew install --cask corretto11

これだけで無駄に時間を使ってしまったのが、悔やまれる・・

今夜は以上で。おやすみなさい。

Spring Securityで発生するEvent/Exceptionのハンドリングについて

毎日書くと宣言しておいて危うく二日目で約束破るところだった。。。

今日はSpring Securityを使った実装について書きます。

と言っても今日は調べたところ覚書程度で、
内容アップデートしていこうと思います。(多分別記事にする。)
個人的にここは本当に知っておきたいところ。

1. Spring Securityの認証処理で認証成功・失敗時に発生するイベント

Spring Securityでは認証処理を org.springframework.security.authentication.AuthenticationManagerをimplementsしたクラス(ProviderManagerなど)で行なっています。

この時、認証の成功・失敗でそれぞれ以下のイベントメソッドが実行されます。

* 認証が成功した場合
AuthenticationEventPublisher#publishAuthenticationSuccess

* 認証が成功した場合
AuthenticationEventPublisher#publishAuthenticationFailure

イベントにはorg.springframework.security.core.Authenticationをimplementsしたクラスが格納されています。 また、publishAuthenticationFailureの方にはAuthenticationExceptionクラスを継承したExceptionが格納されます。

このイベントはorg.springframework.context.event.@Eventlistnerでハンドリングすることができ、認証成功・失敗による任意の処理を実装することができます。

2. Spring Security ソーシャルログインでの連携同意拒否をした場合のハンドリング

FB・Googleアカウントを使ったソーシャルログインは、 Spring Security5のOAuth2 Clinetを使用すると簡単に実装することができます。

ソーシャルログインで一つポイントなのが、 ユーザーによっては先方(FB/Google)のサイトで「ログイン認証連携拒否」を選択した場合のケースが考えられます。

この場合どのようにハンドリングするのか調査しました。 結果Spring Securityの処理を定義するクラスで制御が書けることが分かりました。

(実装例環境)

- JAVA 8
- Spring Boot 2.4
- Spring Security 5
  • パターン1: 指定パスのページを表示する
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .csrf().disable()
                .anonymous().disable()
                .authorizeRequests()
                .and()
                .exceptionHandling()
                .accessDeniedPage("/path-to/access-denied-page.html")
        
        ;
    }
}
  • パターン2: ハンドラークラスを用意し、任意の処理をさせる。

ハンドラークラスについては、 AccessDeniedHandlerインターフェイスをimplementsする必要があります。

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .csrf().disable()
                .anonymous().disable()
                .authorizeRequests()
                .and()
                .exceptionHandling()
                .accessDeniedHandler(new HogeAccessDeniedHandlerImple())
        
        ;
    }
}

と言うことで今夜は以上です。

令和になりましたね

令和になりましたね。

 

GWの中日である今日は一日ドヴォルザークのピアノ4重奏曲の練習をしてました。

ええ曲ではあるのですが、

名曲と言われるピアノ五重奏曲と比較すると、

ちょっとつかみどころがない部分があり、

(ドヴォルザークの初期の方の作品なためか?)

無理矢理感というか恣意的な音の配列があり割と弾きにくい曲です。

(弾きにくいと感じるのは私の技術力の問題でもあるが・・)

 

さて、練習中に音楽関係の友人から連絡があり、

マックス・ブルッフのヴァイオリンコンチェルトを

来月伴奏して欲しいと軽い無茶振りみたいなのが来た。

 

ブルッフのコンチェルトは有名ということは知っているけど、

実はちゃんと聞いたことがなく、

youtubeの諏訪内さんと樫本さんの演奏聴いて勉強中。

こんな曲だったんだっけ。

オケパートはそこまで難しくなさそうだが、

これが曲者で、ピアノ伴奏譜だとものすごく弾きにくかったりするので、

早く譜面が欲しいところだ。

 

 

 

三日坊主ならぬ・・そして平成最後

三日坊主ならぬ一日坊主で、

早速ブログを書かずにはや20日

平成最後の日 久々に書きます。

 

この2,3ヶ月自分が参加している、

ある音楽サークルのホームページ作成を行なっていました。

(ちなみにHTMLとCSSのみで作成)

どちらかというとサーバーサイドSEなので、

デザインを考えたりフロント部分のコーディングは

新鮮でした。

 

本やオンライン学習サイトとは違い、

今回のような実践的なものを自由に作る機会があると、

いやでも自分から一から考え作らなければいけないので、

非常に勉強になりますね。