AWSのELB/SSL Termination配下や、ロードバランサ配下にCakePHPなシステムを設置するとき、
なんとなく SecurityComponent::requireSecure() を使わず、独自のSslComponentをつくることが多かったのですが、
これはSSLの判定条件がELB/SSL Termination配下だったりすると、
- (そのままだと)
SecurityComponent::requireSecure()が動かない - SSLの判定条件を変更する必要がある
という2つの事象が発生するためで、特に大きな理由はありませんでした。まあ、全く考えていなかったです。
もともとCakePHP1.3系のころから使っているSslComponentのロジックがあったので、それでいいかな。とずっと思っていました。
そろそろまとめたい
で、様々な要因が重なって「そろそろSSL判定用のプラグインを作っとくか」と作ったら、
kozoから「CakeRequestと連動できるんじゃね?」と、一言。
CakeRequest::is(***) はdetectorを1つしか当てられないのですが、
callback で判定ロジックを渡すことができるので、これを利用して、Pluginの機構からうまく CakeRequest::is('ssl') の判定ロジックを拡張できました。
ふとSecurityComponent::requireSecure() の処理を追ってみた
「そういや SecurityComponent::requireSecure() はどうなっているだっけ?」
となんとなく処理を追ってみたら、
当然かのように CakeRequest::is('ssl') が利用されており、図らずして Yassl pluginで SecurityComponent::requireSecure() の判定ロジックが拡張され、
ELB配下でも使えるようになりました。