SpringBootでID/PASSによる認証を学ぶ
簡単なサンプルを自分で作って見て、SpringBootにおける認証処理、ユーザーごとの権限処理を学びます。以下はWebで結構な方が書いているので色々見たのを自分なりにメモしているものです。ソース自体はどこかの記事で見かけた物を流用したりしています。
まず、基本となる画面を作る
例としては、こんなURLでアクセスした場合の画面を作っていきます。
/user | ユーザーがログインした時にしかアクセスできない領域 |
/admin | 管理者がログインした時にしかアクセスできない領域 |
/etc | ログインしなくとも誰でも見れる領域 |
/mylogin | ログイン用の画面 |
はじめに、とりあえず上記のURLでアクセスできるものを作ります、
pom.xmlは以下が必要になります。
spring-boot-starter-thymeleaf spring-boot-starter-web
画面はこんな感じ
/user.html
<html> <body> <h1>USER!! page</h1> </body> </html>
/admin.html
<html> <body> <h1>ADMIN!! page</h1> </body> </html>
/etc.html
<html> <body> <h1>etc...!! page</h1> </body> </html>
/mylogin.html
<html> <body> <form id="login_form" method="post" action="@{'/login'}"> <label>login id</label> <input type="text" id="login_id" name="login_id" /> <br> <label>password</label> <input type="password" id="login_password" name="login_password" /> <br> <input id="login_button" type="submit" value="send" /> </form> </body> </html>
とりあえず画面へのアクセスは1つのクラスにまとめておきました。(この設計が良いか悪いかは別とします。)
PageController.java
@Controller public class PageController { @RequestMapping(value="/user") public ModelAndView pageUser(ModelAndView mv) { mv.setViewName("user"); return mv; } @RequestMapping(value="/admin") public ModelAndView pageAdmin(ModelAndView mv) { mv.setViewName("admin"); return mv; } @RequestMapping(value="/etc") public ModelAndView pageEtc(ModelAndView mv) { mv.setViewName("etc"); return mv; } @RequestMapping(value="/mylogin") public ModelAndView pageLogin(ModelAndView mv) { mv.setViewName("mylogin"); return mv; } }
これでサクッと全ページアクセスできました。
認証処理を作る
次に、/admin, /userはログインしていないとアクセスができないようにします。認証処理をSpringBootで使うにはpom.xmlに次を追加すればいいようです。
spring-boot-starter-security
とりあえず追加してみて再起動してみます。あれ?御呼びでないページが出てきました。パスが/loginでこちらの期待するパスでもありません。SpringBootが出すデフォルトのログイン画面みたいですね。しかもどのページを開いてもこの画面になってしまいます。権限の設定などをしないとダメ見たいですね。
/user, /admin はログイン後に表示できるページという風にしたいので、未ログインの状態ではログイン画面に飛ぶようにしてみます。その場合、WebSecurityConfigurerAdapterのサブクラスを作って認証処理の設定を作り込むようです。認証処理はこのクラスがキモのようで、このクラスに色々と追加していくと認証が完成していくみたいです。その際、ログイン者の権限として"USER", "ADMIN"を作ります
MySecurityConfig.java
@Configuration public class MySecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { // 認可の設定 http.authorizeRequests() .antMatchers("/user").hasAnyRole("USER", "ADMIN") .antMatchers("/admin").hasAnyRole("ADMIN"); // 認証処理を行うインスタンスを設定 http.authenticationProvider(new MyAuthenticationProvider()); // ログイン設定 http.formLogin() .loginProcessingUrl("/login") // 認証処理のパス .loginPage("/mylogin") // ログインフォームのパス .failureHandler(new MyAuthenticationFailureHandler()) // 認証失敗時に呼ばれるハンドラクラス .defaultSuccessUrl("/user") // 認証成功時の遷移先 .usernameParameter("login_id").passwordParameter("login_password"); // ユーザー名、パスワードのパラメータ名 } } ||< <b>MyAuthenticationProvider.java</b> >|| public class MyAuthenticationFailureHandler implements AuthenticationFailureHandler { @Override public void onAuthenticationFailure( HttpServletRequest request, HttpServletResponse response, AuthenticationException exception) throws IOException, ServletException { String errorId = "ERR_001"; if(exception instanceof BadCredentialsException){ errorId = "LOGIN_001"; } // ログイン画面にリダイレクトする response.sendRedirect("/mylogin?error=" + errorId); } }
MyAuthenticationProvider.java
public class MyAuthenticationProvider extends AbstractUserDetailsAuthenticationProvider { private static final List<GrantedAuthority> AUTH_USER = AuthorityUtils.createAuthorityList("ROLE_USER"); private static final List<GrantedAuthority> AUTH_ADMIN = AuthorityUtils.createAuthorityList("ROLE_USER", "ROLE_ADMIN"); @Override protected void additionalAuthenticationChecks( UserDetails userDetails, UsernamePasswordAuthenticationToken authentication ) throws AuthenticationException { // nothing to do } @Override protected UserDetails retrieveUser( String username, UsernamePasswordAuthenticationToken authentication ) throws AuthenticationException { String password = (String) authentication.getCredentials(); // ユーザIDとパスワードをチェック // データベースのユーザー情報などに"ROLE_AUTH", "ROLE_ADMIN"などを保存しておき取得 boolean isValid = true; //AuthApi.isValidUserIdAndPassword(username, password); if (!isValid) { throw new UsernameNotFoundException(username); } // とりあえずadminだったら管理者 List<GrantedAuthority> auth = AUTH_USER; if (username.equals("admin")) { auth = AUTH_ADMIN; } // UserDetailsの実装(User)を生成し戻り値とする return new User(username, "dummy_pass", auth); } }
注意点として、作ったロールですが、 MySecurityConfigでは"USER", "ADMIN"、MyAuthenticationProviderでは"ROLE_USER", "ROLE_ADMIN"と名前が異なっています。どうやらWebSecurityConfigurerAdapterでパスにロールを設定する際、hasRole( ), hasAnyRole( )を使った場合、勝手に"ROLE_"というプレフィクスをつけるようですね。紛らわしい
キーホルダー作成・ずん子さん、小松姫、その他
前回のキーホルダー作成時、Fablab仙台の月間会員となっていたため(5000円を払った日から1か月間、HAJIMEが無料となる)10日ほど残った日数がもったいなくじゃぁキーホルダーをもう一回作るか、という事になりました。
同じように作ってもしょうがないので、今回の目標は
①表側は2度塗り
②裏側にも絵を塗る
というものを立てました。計画ではこんな感じに印刷します。1回7分ぐらいなので全部1度塗りであれば7+7+10+7で31分前後、表と白を2度塗りでやっても+14分で45分程度のはず、データ、部材のセットも含めれば1時間で①は十分間に合うはず。
一番上の絵の部分が今回の目標②の部分です。一番下のガイドはアクリルに印刷するのではなく、UVプリンタ印刷台に敷いた紙に印刷します。
月額会員分があと10日ほど残っていると言ってもその日付でキーホルダのデザインを全て作る事は難しく初めにキーホルダーの大きさだけ切っておいてあとからゆっくりデザインを決めてUVプリンターで印刷という手はずにしました。
切りのデータから切っておきます。前回のサイズがキーホルダーとしてはちょっと大きいかな?と思っていたので今回はその反省を踏まえ、一回り小さくしています。時間はこれでHAJIMEで20分ぐらい。以外とかかりますね。時間貸しなので、あと余った時間はずん子さんのコルクコースターでも作ります。だいたい15分ぐらいでしょうか。色々部材のセットとかやってこれで大体1時間です。
切ってる最中です。
さて困ったのは塗りのデータ作成です。最近和柄がいいなと思い、頑張ってイラレで和柄のスゥオッチを作成して使ってみます。東北三姉妹と小松姫、あと鳥獣戯画、ミュシャから百合を入れてみました。お!令和と言う文字が・・・ちょうど発表の時期にデザインを考え中でしたので入れてみました。(わざとらしい)
さてこれを印刷します。はじめにUVプリンタの印刷台に敷いてある紙にガイド線=切りの線を印刷します。この線に沿ってアクリルを載せるのですね。
↓はガイド線に沿ってアクリルを置いたものです。
この状態になって初めて絵を印刷します。毎回緊張します。ここで失敗すれば今までの苦労がパーですからね。データ作ってアクリル切って、絵をデザインして、この工程だけで何日もかかっています。
今回は二度塗りの設定をしました。大体1回塗ると7分で2度塗りをするとその倍かかると思っていたのですが、施設の方いわく、印刷ヘッドが2つあるらしく、2度塗りをしながら印刷するとのことでそんなには時間はかからないよと言う事でした。ホっ・・・
これに白で上塗りしていきます。せっかく塗れた絵が消えていきます。キャー!!ちなみに、白も2度塗りをしていきます。
予定ではこの後にもう一度絵柄を塗る予定でしたがこれで時間切れとなってしまいました。ちょっと時間が合わない・・・2度塗りは結構時間がかかるのかな?悔しいですね。
出来上がりです。これにナスカンを付けて完成です。
さて、2度塗りの実力ですが、、、結構濃ゆいですね、、大江戸ちゃんこ、結構濃くでてます。
単純な比較はできませんが前回1度塗りでやったキーホルダーと比べてみます。左が今回作った2度塗り、右が前回作った時の1度塗りです。明らかに色が濃いですね。特にスカート部分。
上が2度塗り、下が1度塗りです。濃すぎますね・・
上が2度塗りです。こちらも濃いですね・・
2度塗りの弊害として、裏側のホワイトを塗った部分がちょっと盛り上がってます。キーホルダーとしては1度塗りで良いような気がします。
さて、個別に見ていきましょう。
きりたんです。ナスカンにはキーホルダーとチャームをつけています。星型のそれです。丸いのは実はチャームではないのですがチャームっぽかったのでつけてみました。個人的には左のキーホルダがデザイン、色合いともお気に入りです。
短冊形のキーホルダです。前回の作ったのは形としてすごく気に入ったのですが、やや大きかったので一回り程ちいさくしてみました。結果、大きさとしてはバッチリです。どれも甲乙つけがたいですが、鹿の子模様にねじり梅のバックのきりたんがいいですね。
イタコ姉と大江戸ちゃんこ、です。ちゃんこかわいい!イタコはひょうきんな感じにするととてもいいですね。いじりがいがありそうです。
さて。丸形です。令和のデザインを作ってみました。あと左下は小松姫というキャラクターで、信之・小松姫プロジェクト と言う所で出しています(エントリ下のリンク参照)。以前から可愛いと思っていたのと、Twitterでの絵がなんとも面白くウォッチしていました。あとはずん子さんですね。このずん子さん、ほんと苦労しました。デザインが二転三転してどうすればいいんだろうと悩んだものです。まだまだですが・・・
どんなデザインにするかもうネタ切れの頃、入れたい絵もなくこんなのも入れてみました。鳥獣戯画については高山寺が権利登録を行っているみたいですが個人利用の範疇で作ってます。ミュシャについては既にパブリックドメイン入りしているのですね、、知らなかったですが、これも個人の利用の範囲で作っています。
祭りの後。残ったのはこのフレームだけです。これはボキボキと折ってゴミ箱行きです。ありがとう、君の事は忘れないよ。
いくつかは順次、BOOTHにて販売していきます。
ご興味のある方はどうぞ。出ていないもので購入されたい方はTwitterなどのDMで連絡いただければ、XX様専用としてBOOTHに作ります。価格は1000円+送料350円(BOOTH安心パック、ネコポス)です。
Switchのコントローラ修理をムスコにさせました
部品があれば交換できるとは知っていたのですが、Y字ドライバーが無いため躊躇していましたが、こんな感じのを購入しました
こういうの自分で修理できるんだよと言うのを経験させるため、させました。まぁ壊れてもその時は新しいのを買えばいいし・・・(自分のお目目が老眼でもう見えないってのもありますが、自分がやってはあんまり意味が無いので)
Switchのコントローラーは新品を2個ほど買っています。新品でSwitch購入後6か月ほどで変になり、新しいのを購入、また1か月ほどでおかしくなり新しいのを購入なのでコントローラーが2つほどその辺に転がってます(^^;)
正直言うと、Webでも結構な方が左コントローラーの不備を訴えており、こんなのほんとSwitchに何らかの設計の不具合あんじゃないの?って感じしかしなく怒りすら覚えます。
外装ネジが1本なめてしまい、そいつを破壊するなど苦労したようですがとりあえず修理は出来たようです。まぁ経験になればよいかなと・・・
取った部品はこんな感じで表面上は綺麗でしたが・・・
部品を分解すると例の白い粉でびっしりでした。
「地元がヤバイ...と思ったら読む凡人のための地域再生入門」を読んだ。ガンは助成金と地域の人そのもの
特に地元で何かを始めるという訳でもないですが、話題なので読んでみました。
小説形式で主人公がひょんなことから地元で商売を始めてしまった、というストーリーで、所々にマーカーが引かれてそれに対して著者の長年の経験による補足が入り、なるほどねぇっとなる形式です。
地域で仕事をしているわけでは無いですが、どれも、あぁ、、なんだか分かる・・・というものばかりです。
読んだ感想としては全体に貫かれるのは「助成金は悪」ということ。助成金は麻薬のように使い始めると辞められない。事業は助成金によって、助成金に生かされるという状況に追い込まれていくということ。そして地域は助成金でしか生きられない企業が残っていく。
助成金のほかにも、地域で商売を始める際の障壁となるのが地域(の住民)というのも面白いです。
しかし地元で商売をしているわけでもないのに、わかる・・・という感覚は、もしかして自分が会社勤めをしている場合でも、その会社が地域と同じような状況になっているということかもしれませんね。
追記:
本の内容として著者が長年やってきたことがベースになっているんだろうけど、いかに地域の土地の有効活用をして金を生むか、と言うことなんだろう。小説の主人公の事業もそう言う面で書いてある。
主人公やその仲間自身が地域で必要となるスーパーなり本屋なりそう行った現実の事業を営むのでもなく、その事業を集めて土地の価値を上げる、主人公の収益はその利ざやだから。(別にそれが悪いとは言っていない)
自分が面白いな、参考になるかな?と思いつつ読んだ違和感がそれで、自分みたいな資本も土地もリソースを持たない人間はやるとすれば何らかの現実の事業をするしかないわけで、その辺の現実の事業を地域で起こすにはどうすればよいか?と言う面が一部は書いてあったがあまりなかったのでその辺、また書いて欲しいなと思った。
「死者の結婚 祖先崇拝とシャーマニズム」を読んだ
死者の結婚 祖先崇拝とシャーマニズム (北大文学研究科ライブラリ 3)
- 作者: 櫻井義秀
- 出版社/メーカー: 北海道大学出版会
- 発売日: 2010/04/13
- メディア: 単行本
- クリック: 10回
- この商品を含むブログ (1件) を見る
以前、FBの友達(という名の知り合いとも呼べない人)が読んでいたのがウォールに上がっていたのを題名が面白そうだと購入したもの。一度読んでいたんだけど、先日いらない本を処分するにあたり整理していたところそう言えば面白かったなと再度読み直してみた。
題名からスピリチュアルなものか?とかオカルト?小説なのか?とか想像してしまいますが内容は世界中にある死者が結婚する習俗を扱ったもので、中心になるのは山形のとある地域(山寺)で行われているムカサリ絵馬奉納というものを題材にした社会学の研究が中心です。
この死者の結婚ってモチーフは藤子Fの短編でも「山寺グラフィティ」でもそのまんま使われていて面白いなと思った記憶があります。それ故に、FBのウォールに上がってきた時に興味を持ったのですが、それ以後山寺に登るたびにこの死者の結婚って風習について思い出してしまい、仏閣を見る際にそういう視線で見てしまう事になったのですが。
死者の結婚自身は、結婚をせずに死んでしまった家族を死んでからでも結婚をさせる事によって死者の色々な権利を回復していくというもの。
死者の権利回復とは?なんで死んでるのに結婚なの?って疑問が浮かぶけど、日本人の生まれてからのライフサイクルとして、生まれてから結婚して家、家庭を持ち死んでいく、年忌法要が終わると祖先となるというもの。
そのなかで結婚すら出来ない、子孫を残さずに死ぬという事はその先にある祖先になる事ができないという考えがベースにあり、生者の事故や家族の病気、不幸など先ほどのあるべき人生、従来からの規範からの逸脱が故人からの知らせと解釈され、山形の例ではムサカリ絵馬奉納として行われる。
しかしながら死者の権利回復は本書の中盤にある奉納した人へのアンケート、聞き取りでわかるように、死者の権利回復をしつつ自分の気持ちの整理であったりがそのムカサリ絵馬奉納によって行われるというものでしょう。これは葬儀が死者のみならず残された家族などのために行われている事と共通しているのでしょう。
まぁ聞き取りの内容を読むに、奉納をして事象(悪い事)が収まったなどと言った内容を見ればこう言った部分はオカルトと言われても仕方がないですが、それ自身が問題をムカサリ絵馬奉納を機に心の中で整理したという事なんだろう。
こういうのを読んで思うのはオカルトと切り捨てても別に個人の自由だが事実としてこういう習俗があったという事。以前、イザベラ・バードの日本奥地紀行を読んだ際も思った事だが、正直読んでもこんな風俗知らないぞ?これはどんなものだろう?と文章で読めても、どんな物なのだろうと想像すら出来ないものがあった。でも著者の目から見た風俗はその時はあったわけで、この人が残していなかったら日本の以前あった風俗というものは消えて歴史の中からも綺麗サッパリなくなっていたんだろうということ。
どんな風俗、習慣であっても本に残るということが大事であろう。最近文系はイランとかいう風潮が強いけど、こういう私たちの現在に対して過去はどうだったのか?ってのがわからなくなるわけで歴史にも学べないという形になるんだよなと。
面白いのは山形の例にしても沖縄のユタにしてもその言ってる事が一般的に、心情的に、は自然な事や、何十年も前の法律や狭いその地域での人々の規範(家父長制など)をベースとしていること。何も神様が憑いたから特別な事を言うってわけではないところで、こういうのがこの死者の結婚の習俗のように一般的に「オカルト」と感じられるものであっても丹念に調べていけば過去のある時点の習慣、法律を元にしているというもの。面白い。
- 作者: イザベラバード,Isabella L. Bird,高梨健吉
- 出版社/メーカー: 平凡社
- 発売日: 2000/02/15
- メディア: 文庫
- 購入: 9人 クリック: 56回
- この商品を含むブログ (80件) を見る
「無気力の心理学ーやりがいの条件」を読んだ。効力感を得る方法
1981年に書かれた本、この手の本はだいたい本屋さんでさ迷っている時にタイトルみて面白そうだなとか興味ないけど強制的に目についたものを買うんだけどだいたい、初版がいつか?を見てから買う。なのでだいたいは1年〜2年ぐらい前に発売したものが主になる。でもこれ買う時うっかり忘れてしまい、買ってからえ?81年って・・・何年前よ・・・と後悔しながら読み始めた。
無気力の状態、無力感を味わっている状態なんだけど、無力感は環境など変えがたいもので苦痛を味わっている時に感じる。そのような状態が続くと変えられる状況であっても変えずに堪えるようになる。
その反対が効力感。自分は環境を変えることができるという気持ち。本書ではこの効力感の育て方についてアレコレと心理学の実験から分析する。
内容についてはよく子育てで言われるように「成功体験」が効力感を育てると言う。本書で面白いなと感じたのは、この成功体験さえ与えれ入れば人は皆効力感を感じ、やりがいを得る事ができるのか?と言えばそうでもなく、実はそのなかに失敗を織り交ぜ、その失敗自体は「能力ではなく努力がちょっと足りなかった」と言う事を思い込ませる事によって効力感は大きく得られると言う。
この本を読む前にTwitterでこんなツイート見ててなるほどなぁって思っていたんだけど、その本質がここにあるのだろう。
教育界ではよく『成功体験』が重視されているけれど、
— 先生、学校は行かなきゃいけないの?? (@namonakigakkou) March 23, 2019
それよりも大切なのは、「失敗しても大丈夫、なんとかなる、誰かが支えてくれると感じれる『失敗の安心体験』」。
自分が成功した時の喜びを強調するよりも、失敗したときの怖さを小さくする方が、人は新しいことにチャレンジする。
成功体験を与えるだけではダメってのは、与え続けると成功体験の価値が下がるって事だろうと。行動分析学でいうところの好子の飽和なんだろうと。学びの本質は失敗体験をした時にあり、失敗そのものが能力ではなく努力不足にあると思う事によって努力すれば良いと感じるはずで、諦めずに次の行動に移る理由ができ、次の行動をした際に成功する(好子の価値を下げずに得られる)、そうするとその行動自体が強化され効力感が得られる(努力すれば変えられると考えるようになる)
小さな成功体験の中に失敗のしやすさを提示すること(失敗させること)その時に、あなたの能力ではなく、もうちょっと頑張れればね?って言ってくれる環境。隣人、これが大事なんだろう。なんと言う釈迦の掌感、父性と母性の話だよねこれ。
ただ、なんでも失敗が努力不足と思わせれば良いかと言うとそうではなく、この辺は社会構造により異なる事は本書で指摘しています。本書では日本の社会構造とアメリカの社会構造に触れ、本書で参照している心理学実験はアメリカなどの能力主義(成果主義)な社会構造での実験であるため、もともと失敗の原因が能力不足にあると思わせる環境下にあって、失敗の原因を能力ではなく努力不足であると言う風に考えさせると効力感が増すと言うものだからです。一方、もともと努力信仰が強い日本の社会においては全てにおいて努力不足と言うのは危険であると言っています。
p46
とくに日本のようにもともと努力が尊重されている文化のなかにおいては、かえって危険でさえある”
本書全体で語られるのは、失敗の際に本人が「能力に不足があった」と思うか「努力が足りなかった」と思うかによって無力感を感じるか、効力感を感じるかが変わってくると言うこと。まぁ感覚でもわかると思うけど、能力がなくてダメって思ってしまったら自分を否定するわけだし努力する理由は絶たれてしまう。やるだけ無駄ってなるよね。
正直この手の本は何度となく読んだりしてるので、あぁあの実験か・・などおなじみに感じる実験があったり、まぁそうだよねぇといった感じはして新しいものはあんまり感じないのですが、81年に書かれている本書の内容がなんとなく今(2019年)の管理社会における人々の感情を言い当てているようで面白いなと思いました。
キーホルダー作成・ずん子さん、スプラ、スマブラ
今回の作成ブツ。
データはこんな感じで作りました。右上のお顔は依頼主のプライバシーなので勘弁。スプラやスマブラに関しては完全な自分の個人利用です。
白レイヤはこんな感じです。施設の方に怒られるかもしれませんが、時間がなくて不要な部分までデータを作ってしまいました。ごめんなさい!下で部分的に黒くない部分は透明な感じになります。
色の部分を印刷中です。
これに上から白のレイヤを印刷します。今回は2回上塗りしています。
こんな感じになります。
さて、これにキーホルダーをつけていきます。
イタコ姉です。後ろの黒く丸い部分は皮です。ワニ皮を同じ形に切ってつけています。あと、星型のチャームをつけて完成です。
きりたんです。毎度作ってしまいますがこの感じ個人的に好きです。
これもきりたんです。
実はこれ、後ろ側に皮を貼り付けています。不思議な感じになりました。作業で汚くなった手が写ったのはご愛嬌
きりたんです。キーホルダーとチャームを変えてみました。
きりたんです。今回きりたん多めです。というよりいつも多めですが。
今回はずん子3姉妹で目線というところで作ってみました。
ここから下はずん子関連とは関係ないです。
これはスプラトゥーンのボールドマーカーネオです。ボルネオ神にすべてをささげよ。今回も武器部分以外は透明にして、後ろに皮をつけてみました。皮が反対というのは内緒です。
これもスプラトゥーンです。ナワバリのマークですね。
これもスプラトゥーン。ガチマッチのマークです。自分はあんまり上手くないのでA+とSあたりをうろらうろらしてます。
これはオクトの画像からです。キーホルダーがなくなったのでつけてません。
これもスプラトゥーン。こういうのもつくってみました。
息子が好きなスマッシュブラザーズ。先のスプラトゥーンもですが、これも完全に個人利用の範疇で作っています。
いかがでしたでしょうか?