この記事は、intra-mart Advent Calendar 2013 第23日の記事です。
Accel Platformの機能紹介を行ってきたintra-mart Advent Calender 2013 ですが、今回は趣向を変えて、WebPlatform/AppFramework(以下、iWP/iAF)でJSP1ファイルだけで、iWP/iAFの中の任意の画面を呼び出す方法をご紹介します。
iWP/iAFで、任意の画面に遷移させる方法としては、ドキュメントワークフローやIM-Workflowなどのメール本文に記載されるショートカットURLという方法がありますが、ショートカットURLは、パラメータも含めた上でアクセスできる点で便利なのですが、ユーザ単位などでアクセスする情報をデータベース上に格納し、またその有効期限も設定する必要があるので、静的なURLで絶えずアクセスさせる用途としては不都合が多いものです。
で、今回は、どうやるのかというと、iWP/iAFでの自動ログインとダイレクトURLを組み合わせただけという簡単な方法で実現しています。
実際のJSPのコードは以下のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="jp.co.intra_mart.foundation.security.AccessSecurityManager" %> <%@ page import="java.util.Arrays" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <% String groupID = "default"; / ログイングループIDの String userID = request.getParameter("uid"); // ユーザID String password = request.getParameter("passwd"); // パスワード String pageURL = request.getParameter("page_url"); // 呼び出したい画面のページURL //遷移させてOKなページURLをここに記載。 String[] okUrls = { "bpw-process_instance_entry_frame_call.service", "bpw-not_completed_frame_call.service", "bpw-applied_frame_call.service", "bpw-consented_frame_call.service", "dt" }; //URL引数がページURLが許可されたものか判定。違ったらポータルに遷移。 Arrays.sort(okUrls); String urlSing = null; AccessSecurityManager asm = AccessSecurityManager.getInstance(); if(Arrays.binarySearch(okUrls, pageURL) >= 0){ // ページ引数のDirectURLのURLシグネイチャ作成 urlSing = asm.createUrlSignature(pageURL, groupID, userID); }else{ // ポータルのDirectURLのURLシグネイチャ作成 urlSing = asm.createUrlSignature("dt", groupID, userID); } %> <!-- 以下のHTML経由でPOSTで目的のページに遷移 --> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head> <body> <form name="redirect" method="POST" action="http://www.hogehoge.com/imart/default.portal"> <input type="hidden" name="im_url" value="<%= pageURL %>" /> <input type="hidden" name="im_url_sign" value="<%= urlSing %>" /> <input type="hidden" name="im_user" value="<%= userID %>" /> <input type="hidden" name="im_password" value="<%= password %>" /> </form> <script type="text/javascript">document.forms.redirect.submit();</script> </body> </html> |
このJSPを、AppRuntimeのdoc/imart配下に適当な名前.jspで置いて頂いて、ブラウザから
1 |
http://www.hogehoge.com/imart/xxx.jsp?uid=(ユーザID)&passwd=(パスワード)&page_url=bpw-not_completed_frame_call.service |
と入力して、アクセスすると、自動でログインして、メニューやトップバーのない、ドキュメントワークフローの画面が表示されると思います。
なぜ、JSPなのか?というと、外部からURLを直接叩いて呼べるのは、ServletかJSPしかないのですが、Servletでは、いろいろとコンパイルや設定の追記が必要で、簡単に試すことができなかったり、運用している既存の環境に手をあまり入れたくないということが多いので、JSPの場合、iWP/iAPの場合、AppRuntimeのdoc/imart配下においてしまえば動いてしまうので、今回のような簡単なことをさせるには便利です。
この例では、JSP内に記載したURLのみ表示させるようにしていますが、なんでもOKにもできますし、逆に特定のURLのみに改変したり、自動ログインをとってしまえば、認証後に画面遷移させたりすることも可能です。URLにパスワードなどの情報を入れたくない場合は、POSTで送信してSSLにするか、JSPで工夫して他の方法で認証するなどしてみてください。当然、セキュリティ面には十分留意してご利用ください。