見出し画像

長引いていた問題がようやく解決!

こんにちは、20年ものプログラマーです。

この前の投稿で書いた、なかなか解決出来なかった仕事の問題の解決方法が分かったので、原因と対応方法をざっくり書いてみたいと思います。

Spring Security 5

Spring Boot 2系(対応するSpring Securityは5)では、セキュリティのデフォルト動作が前より厳しくなっていて、「Spring Boot 1 to 2 migration」とかのキーワードで検索するとミグレーションのやり方に関する情報がドバっと見つかりますが、どういう所がどう変わったかという細かい情報はなかなか見つかりません。

私がハマったのは、1系ではHttpServletRequestとRequestContextから取れていたような情報が、2系では取れなくなっていて、しかも明示的なエラーは出ていなかったという事でした。デバッガで値を見てみて初めて「Has no fields」とかのメッセージを見る事ができました。

このシステムではAPIのリクエストパスから判断してDBのスキーマを切り替えてログインしていたのですが、getRequestURI()というメソッドがこっそり空っぽになっていたのでした。ログインが成功した後になれば取れるのですが、ログイン前の人は/loginに飛ばされます。

これは、ログインする前はリクエストに格納されている情報を使わせないよ、というセキュリティに配慮した仕様だと思うのですが、ログインするためにリクエストしたパスが必要なケースは困りますね〜。

というか、あやうく本番環境に上げる所だった!冷や汗。この段階でバグが発見されて不幸中の幸いでした(笑)

治し方

ログイン処理の前にセキュリティフィルターを一つ追加して、その中でリクエストURIだけをThreadLocalに格納してログイン処理に渡す、という風にしたらうまく動きました。もっとカッコイイやり方があるかもしれないけど、既存のコードの影響を抑えて欲しい結果が得られるので良しとしました。

しかし、Springは便利だけど、自分が知らない所でいろいろな処理が暗黙的に動いていて、問題がない時は「なんて便利なんだ!」と思う反面、問題がある時は解決するのがものすごく難しくて、解決不可能なんじゃないかとまで頭をよぎりました。

人間のお医者さんとプログラマーの類似点を考えてみる

100%人間が作り出したプログラムの中を解析するのでさえこんなに複雑で難しいのに、何万年もかけて進化してきた人間の体の仕組みってもっともっと複雑で、細胞の中で暗黙的に何が起こっているのか、検査したぐらいでは分からないよなあ、なんて思いました。

例えば、私は前に「よかれと思って」カルシウムのサプリメントを毎日飲んでいたら、肩の筋肉にカルシウムが沈着してしまい、腕から肩にかけて激痛が起きて、病院に行ったら5種類ぐらいの検査を命じられ、行った先の検査機関でまた追加の検査をたくさん命じられたりして、全然ラチがあかなかったという経験があります。

その時は、言われた検査を全てやってから最初の病院に戻ったら、最終的に理学療法に行くように言われました。最初から理学療法に行っていたら1ヶ月で解決していたものが、病院から言われた検査を全てやった後に理学療法に行ったから、3ヶ月ぐらい腕肩が痛いままでした。

プログラマーの寿命もすなわち健康

私はもう50歳半ばでプログラマーとしてはだいぶ高齢の方ですが、幸いまだ若い子たちに混じって現役でコーディング出来ています。これって実は、「脳ミソも一つの臓器」であって、体を鈍らせずに、病気をせずに、細胞をみずみずしく保つ事が大事なんではないかと思っています。

リモートワークでも必ず毎日30分ぐらいは外を歩く、ストレッチして血行を良くする、食べ物はなるべく手作りで粗食にする、水分をちゃんと取る、など、健康には気を使っています。(お酒はけっこう飲むけど(笑)メンタルも大事ですので)

よかれと思って2

脳の活性化のために水をたくさん飲むといいという話を聞いた時に、さっそく取り入れてみようと思い、水をこまめに飲むようにしてみたのですが、急にそれまでと違う習慣をはじめると、思わぬ弊害が起こる事があります。

体温が下がる、胃液が薄くなる、pHバランスが変わってしまう、など・・・。どれも風邪を引きやすくなる原因です。水を一度に飲み過ぎて死んでしまう事すらあるそうです。

また、視力を良くしようと思って毎日眼球運動をしていたら、ドライアイがひどくなってコンタクトからメガネに変えなきゃいけない羽目になったという経験もあります。眼球運動自体はいいのですが、眼球周りの血行を良くしてからやらないと、却って悪くなる事があるようです。

健康にいい事も、取り入れる時は少しずつ体を慣らしながらやった方が良いですね。

システムに新しいものを取り入れる時も、本番に反映させる前にじっくりテストしてから、というのと同じような事かもしれませんね。

読んでいただき、ありがとうございました。


いいなと思ったら応援しよう!

20年ものプログラマー
よろしければサポートお願いします!通貨レートの低い海外に暮らしているので、ときどき日本の電子書籍を購入するのに使いたいと思います!