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でエラー発生
今回JDKはAmazon correttoを利用することを考えた。 いくつかの記事を参考に以下のコマンドを実行したが、 caskがないとエラーになった。
brew cask install corretto
別の記事で、caskのインストールが必要と書かれていたので、
以下を実行したが、色々インストールされるものの、
肝心のbrew cask
コマンドはエラーのまま。
brew install cask
これについて、原因が分からず結構時間を費やしてしまったが、 Homebrewの本家サイトを確認すると、
を確認すると、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の諏訪内さんと樫本さんの演奏聴いて勉強中。
こんな曲だったんだっけ。
オケパートはそこまで難しくなさそうだが、
これが曲者で、ピアノ伴奏譜だとものすごく弾きにくかったりするので、
早く譜面が欲しいところだ。
始める
ピアノ弾きのSEです。
日々のこと
tech系のネタ
音楽のこと
徒然に書きます。
どのくらい続く変わらないが、まずは挑戦。