- PR -

別のサーバにあるファイル(DATA)にアクセスしたいですが。

投稿者投稿内容
タラン
大ベテラン
会議室デビュー日: 2004/03/17
投稿数: 138
投稿日時: 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 ]
ふーばー
大ベテラン
会議室デビュー日: 2003/06/05
投稿数: 163
投稿日時: 2004-04-07 15:59
引用:

実はシステムのことがよく分かりません。T.T



であれば、まずはまわりの人とか上司とかに相談してみては?
Webサーバ、およびServletEngineの動作原理がわかる人が見れば
SKTさんの案から A 上の Tomcat というのを外せばうまく
いくことがわかるはずです。



[ メッセージ編集済み 編集者: ふーばー 編集日時 2004-04-07 16:32 ]
タラン
大ベテラン
会議室デビュー日: 2004/03/17
投稿数: 138
投稿日時: 2004-04-07 16:11
有難うございます。

でも。。。 ここは開発会社ではないので上司って言っても開発のことはあまり分からないです。

私も開発の経験もあまりないのです。

それに一番問題なのはコンテンツサーバは別の部署のものなので特別の設定はできません。
こっちサーバーも会社のいろんなものが載ってるので。。。 T.T

まずSKTさんのやりかたも完璧には理解できません。
泣きたいです。 T.T

こんな環境です。方法がありますか。

困らせて本当に申し訳ありません。




[ メッセージ編集済み 編集者: minami 編集日時 2004-04-07 16:13 ]
K
大ベテラン
会議室デビュー日: 2004/04/07
投稿数: 174
投稿日時: 2004-04-07 16:28
引用:

A:コンテンツサーバーには多分サーブレットが動かない環境だと思います。
それでBサーバー(Tomcat)これは私が管理してるので確実です。
Aはただのapacheとかほかのコンテンツサーバーだと思います。

私が今作りたいのはですね。

AのコンテンツサーバーのFirst.htmlページからBのサーブレットが呼ばれてセキュリティ処理が終わってAの次のページSecond.htmlを表示したいですが。。
BのサーバーではAのsecond.htmlは見れないですよね。
sendRedirectなどを使いたいですけどURLがばれるので


すみません。ちゃんと読んでなかったです。
Aでは別にサーブレットコンテナ動いてなくても大丈夫です。

認証処理が終わったあと、
Aにあるファイル(もちろんapacheのドキュメントルート以下にあるのですよね?)
をHttpClientを用いて取得すればいいだけではないでしょうか?
commonsのHttpClientに関しては以下のURLを参照してください。
http://jakarta.terra-intl.com/commons/httpclient/
タラン
大ベテラン
会議室デビュー日: 2004/03/17
投稿数: 138
投稿日時: 2004-04-07 16:38
ご返答有難うございます。

でもよく解りません。 こめんなさい。

教えてくださったwebページ読んでみて
もし解らなかったらまたよろしくお願いします。

本当に申し訳なくて。。。
aa
ぬし
会議室デビュー日: 2004/01/08
投稿数: 299
投稿日時: 2004-04-07 20:45
引用:

minamiさんの書き込み (2004-04-07 13:54) より:
まず作りたいのはAサーバーのコンテンツにセキュリティをかけたいです。



引用:

minamiさんの書き込み (2004-04-07 16:11) より:
それに一番問題なのはコンテンツサーバは別の部署のものなので特別の設定はできません。
こっちサーバーも会社のいろんなものが載ってるので。。。 T.T



別に追い打ちをかけるつもりはないのですが、
セキュリティをかけるって意味、分かってますか?
タラン
大ベテラン
会議室デビュー日: 2004/03/17
投稿数: 138
投稿日時: 2004-04-08 09:04
有難うございます。

セキュリティっていうのはログインをしてから使えるようにしたいってことです。

言い方が間違ってすみません。

開発の経験が浅くて何もわからないです。



[ メッセージ編集済み 編集者: ミミ 編集日時 2004-04-08 13:59 ]
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2004-04-08 09:17
Bサーバーがリクエストを受けたら、
java.net.HttpURLConnectionクラスで
Aサーバーにリクエストを投げ、
そのレスポンスをBサーバーのリクエストに返してやればよいだけでは??
サーブレットの機能だけでは無理だと思います。

この程度の事をわざわざ実装するのであれば、
Aサーバーで基本認証するようにするだけでよいのでは?と
思ってしまいますが。

スキルアップ/キャリアアップ(JOB@IT)