- - PR -
別のサーバにあるファイル(DATA)にアクセスしたいですが。
| 投稿者 | 投稿内容 | ||||||||
|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-04-07 15:48
私が作りたいものです。
参考になればと思って。。。 public class ViewSecurity extends HttpServlet { PrintWriter out; public void doPost( HttpServletRequest req, HttpServletResponse res ) throws ServletException, IOException { doGet( req, res ); } public void doGet( HttpServletRequest req, HttpServletResponse res ) throws IOException, ServletException { out = res.getWriter(); res.setContentType("application/excel; charset=Shift_JIS"); String strURL = "http://AサーバーのIP:8080/Intora/Second.html"; // BASIC認証 HttpSession session = req.getSession(); String authType = req.getHeader( "Authorization" ); // ユーザ認証 if(UserCheck( authType )){ //ここです。 //認証がOKの場合次のページを表示したいですけど別のPCにあるので。。。 //どうすればいいでしょうか。 //StringBuffer nextPage = readData(url); ServletContext context = getServletConfig().getServletContext(); RequestDispatcher rd = context.getRequestDispatcher(url); rd.include(req, res); } else{ res.setStatus(res.SC_UNAUTHORIZED); res.setHeader("WWW-Authenticate", "BASIC realm=\"login\"" ); // HTML文書を送信する printHtml(); } session.invalidate() ; out.close(); } // ユーザ認証 private boolean UserCheck( String auth ) throws IOException { if( auth == null ) return false; if( !auth.toUpperCase().startsWith("BASIC") ) return false; // "BASIC"の後のIDとパスワードを文字列に代入 String userpassEncoded = auth.substring( 6 ); // base 64 decodeの使用 sun.misc.BASE64Decoder dec = new sun.misc.BASE64Decoder(); // IDとパスワードをデコードして文字列に代入 String passReq = new String( dec.decodeBuffer(userpassEncoded) ); int i = passReq.indexOf( ':' ); String ret[] = { passReq.substring( 0, i ), passReq.substring( i + 1 ) }; if( ret[0].equals("id") && ret[1].equals("pw") ){ return true; } else{ return false; } } private StringBuffer readData( String path ) throws IOException{ BufferedReader in = new BufferedReader( new InputStreamReader( new FileInputStream(path), "Shift_JIS")); String line = null; StringBuffer all = new StringBuffer(""); while((line = in.readLine()) != null){ all.append(line + "\n"); } in.close(); return all; } // HTML文書を送信するメソッド private void printHtml(){ out.println("<HTML><HEAD>" + "<TITLE>401 Authorization Required</TITLE>" + "</HEAD><BODY>" + "<H1>Authorization Required</H1>" + "This server could not verify that you " + "are authorized to access the document you " + "requested. Either you supplied the wrong " + "credentials (e.g., bad password), or your " + "browser doesn't understand how to supply " + "the credentials required.<P>" + "</BODY></HTML>" ); } } [ メッセージ編集済み 編集者: minami 編集日時 2004-04-07 15:51 ] [ メッセージ編集済み 編集者: minami 編集日時 2004-04-07 15:53 ] | ||||||||
|
投稿日時: 2004-04-07 15:59
であれば、まずはまわりの人とか上司とかに相談してみては? Webサーバ、およびServletEngineの動作原理がわかる人が見れば SKTさんの案から A 上の Tomcat というのを外せばうまく いくことがわかるはずです。 [ メッセージ編集済み 編集者: ふーばー 編集日時 2004-04-07 16:32 ] | ||||||||
|
投稿日時: 2004-04-07 16:11
有難うございます。
でも。。。 ここは開発会社ではないので上司って言っても開発のことはあまり分からないです。 私も開発の経験もあまりないのです。 それに一番問題なのはコンテンツサーバは別の部署のものなので特別の設定はできません。 こっちサーバーも会社のいろんなものが載ってるので。。。 T.T まずSKTさんのやりかたも完璧には理解できません。 泣きたいです。 T.T こんな環境です。方法がありますか。 困らせて本当に申し訳ありません。 [ メッセージ編集済み 編集者: minami 編集日時 2004-04-07 16:13 ] | ||||||||
|
投稿日時: 2004-04-07 16:28
すみません。ちゃんと読んでなかったです。 Aでは別にサーブレットコンテナ動いてなくても大丈夫です。 認証処理が終わったあと、 Aにあるファイル(もちろんapacheのドキュメントルート以下にあるのですよね?) をHttpClientを用いて取得すればいいだけではないでしょうか? commonsのHttpClientに関しては以下のURLを参照してください。 http://jakarta.terra-intl.com/commons/httpclient/ | ||||||||
|
投稿日時: 2004-04-07 16:38
ご返答有難うございます。
でもよく解りません。 こめんなさい。 教えてくださったwebページ読んでみて もし解らなかったらまたよろしくお願いします。 本当に申し訳なくて。。。 | ||||||||
|
投稿日時: 2004-04-07 20:45
別に追い打ちをかけるつもりはないのですが、 セキュリティをかけるって意味、分かってますか? | ||||||||
|
投稿日時: 2004-04-08 09:04
有難うございます。
セキュリティっていうのはログインをしてから使えるようにしたいってことです。 言い方が間違ってすみません。 開発の経験が浅くて何もわからないです。 [ メッセージ編集済み 編集者: ミミ 編集日時 2004-04-08 13:59 ] | ||||||||
|
投稿日時: 2004-04-08 09:17
Bサーバーがリクエストを受けたら、
java.net.HttpURLConnectionクラスで Aサーバーにリクエストを投げ、 そのレスポンスをBサーバーのリクエストに返してやればよいだけでは?? サーブレットの機能だけでは無理だと思います。 この程度の事をわざわざ実装するのであれば、 Aサーバーで基本認証するようにするだけでよいのでは?と 思ってしまいますが。 | ||||||||
