当たり前のことを当たり前にやる
非機能要件もちゃんと!
ぶっちゃけ穴だらけだなー
まさかのEL式はエスケープ処理してくれないんだな
${title} とか書いたらXSS発生する
<s:property value="<script>alert("うへへ");</script>" />
はOK
JavaScriptとか書きだすために使うならescapeJavaScript="false" にすればおkかな?
昔(ってかつい最近)これにはまって、Struts2の吐き出す文字は文字参照型になるのか…JavaScriptで正規表現でマッチ⇛エンコード(?)しないといけないのか…と頑張ったけどエスケープをしないようにすれば済む話だったんだろうな…多分、試してないからしらないけどorz
CSRFはトークンインターセプターで対応すればいいと思う。多分。これまた試していないけど。
Token Interceptorは、
んでんで
Hibernateってキャッシュ持つけど、あれ、クラスタリング組むときとか複数APサーバーがいるとき困るだろうなぁーと思って今日「hibernate クラスタリング」でぐぐってみたらやっぱりそうみたいだ。キャッシュサーバーをかまして複数APサーバーから参照するのが解決策っぽいにおいだった。
もしかしてAppricationスコープにキャッシュデータおいてて、スコープのデータをレプリケーションして使うのかなーなんて妄想したけどそうじゃないみたいな?memcachedか、と思ったけどJava界ではTerracottaとかEhcacheとか有力なのかなー?
Hibernateはただ使う分には結構便利だなーSQL叩かなくていいから楽ちんやなーとか思ってたけど、いざ自分が当事者でなんかなんかのお仕事で使うとかなったときはちょっと怖いなー、と思うと技術力ってやっぱ大切だよなとか妄想した。
「hibernate?あー簡単よ!」とゆーが、悲観的なわたすはどうも簡単によゆーよゆー!とは言えない。
Geekな世間ではHiebernateとかとっくにオワコンだろwwwwらしいけども
あとあと
トランザクションどーすんだろー
にゃー。
DAOの中でトランザクションをスタートして、コミットする、値を返す、終わり。
というコードしか書いた事無いので、DAO(1)とDAO(2)の更新処理が成功してトランザクションをコミットする、っつーコードを書きたいときは、トランザクションの管理をサービスロジック層でやらないといけない気がして…
その辺Spring使うと上手く解決してくれるのかなーとか妄想している。
それともそもそもの考え方が間違っていて、トランザクションの話をサービスロジックまで持ちだしてはいけないのか…そんなことはない気がするけど、なかなか謎だ。
とゆー事でその辺もどうやれば正しいのか追う必要がある。
そしてそして
いちょ、GrailsでもSpring+Hibernateは使われているらしいので、今のうち勉強しといても資産引き継げるだろうなーとか妄想している。
それよりPlay!Frameworkが熱いんだろうなーと見ているけれども。
Javaにもこういう道があることを知れたので、Rubyを学ぶ理由はひとつ減った。
Rails使ってうはうはきゃふふしたいけれども、それはGrails使ったりPlay使ったりすればJavaも勉強できるしイケイケなLL的なこともできるし?みたいな。
価値観が変わってきてるなー、ちょい前まではPHPサイコーCakeでBake!Bake!と思っていたのに。
だからー基本が一番大切だよ?
いちょ、Struts2とかHibernateとかSpringは仕事で使うので(早急に?)ばっちり覚えないといけない。もうこれはとーぜん。
でもJavaスクールの危険を読んで改めてデータ構造・アルゴリズムの勉強はちゃんとやらないといけないんだなーとか思ってビビった&衝撃を受けた。やっぱすごい人って、基本的なことをちゃんと(んー基本的なことと言うか、ロウレベルなことと言うか、原理と言うかを)理解していんだなぁーと。
Cでソート書いてみたり連結リスト書いてみたりしないとダメだな…(ごめんなさい書いたこと無いですorz もちろんポインタは理解しているっすよ。Javaはヒープ領域をバシバシ使ったポインタだらけの世界!) Cで連想配列自作できるかなー!HashMap自作とかなかなかイケメン。
そしてオレも関数型言語やりたい!と思った。
言語は心の習慣だといわれれば、ねぇ?
ん?Scala?JVM上で関数型言語やりたいなら。
Play使ってフロントにScala使えばいいんじゃね?
男ならOCamlとかHaskell、Scheme,Common Lispだろって感じだがそれは無理し過ぎなのかもしれない。