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配下でも使えるようになりました。