2012-01-16 23 views
1

私は予約システムである簡単な小さなアプリケーションを書いています。システムには、管理者とユーザーという2つの役割があります。すべての要求が唯一のサーブレットを介して動作しています。 Index.jsp(ユーザーと管理者用のログインページ)は役立たずに機能します。だから私は始まるURLはこのように見えるがあります。Java EE WebアプリケーションでカスタムURLを作成

はlocalhost:8080/[AppNameは] /index.jsp

確保するためのセキュリティは、私は、匿名ユーザーが任意のページに行くことができませんフィルターを書きました、 index.jspを除く。管理者はユーザーページに移動し、ユーザーは管理ページに移動します。 [コマンド名]

ため= 8080/[AppNameは] /サーブレットコマンド:

はlocalhost:?しかし、問題は私のアプリ内のすべてのURLがどのように見えるので、私は、適切にフィルタをマッピングすることができないということです

<filter-mapping> 
    <filter-name>Security</filter-name> 
    <url-pattern>/servlet?command=[commandName]</url-pattern> 
</filter-mapping> 

は動作しません、とでたので、私は、まったく好きではない:これは、そのようなマッピング、(もちろん、web.xmlにフィルタがすでにこのマッピングの前に記載されている)のようなのこの場合、アプリケーションのすべてのコマンドを処理する必要があります。 smbdyは、これらのようにログオンしたときにこの点で 、私は、URLを作るためにアイデアを持っている:

はlocalhost:8080/[AppNameは] /ユーザー - ユーザーのための

はlocalhost:8080/[AppNameは]/admin - 管理者

web-infフォルダには、「エラー」、「管理者」、および「ユーザー」といういくつかの内部フォルダがあり、これらのJSPページを保持する内部フォルダ「ページ」があります。役割とエラー。

提案されたアイデアを実装する方法は?私はこれが非常に些細なことだと思うが、答えを見つけられなかった。なぜなら、私の問題に名前を付ける方法もないからだ。私は最近、私のプロジェクトでは、そのようにしてみてください似何か持っていた

+0

この[ページ](http://docs.oracleを拡張する必要があり、それを呼び出します。 com/javaee/1.4/tutorial/doc/Security5.html)が役に立ちます。この[質問](http://stackoverflow.com/questions/6202778/am-i-doing-the-servlet-filter-correctly)をチェックしてみてください。 – Dallas

+0

リンクありがとうございますが、私が探しているものではありません。 最初に認証タイプについて説明し、2番目にユーザーの要求のサーブレット処理について説明しました。残念ながら、どちらもカス​​タムURLを作成することについての解決策はありません。 – juniorIce

+0

url-patternではなく、サーブレット自体にフィルタをマップするだけではどうですか? –

答えて

0

私は今それを得ると思います。 - 最初のサーブレットを作成します(index.jspはサーブレットではありません)。ユーザーがページにアクセスすると、そのページにリダイレクトされます。たとえば、localhost:8080/YouWebAppName/IndexServletです。

IndexServletセッションが設定されているかどうかを確認します。セッションが設定されていない場合はアクセス可能なインデックスにリダイレクトされます。セッションが設定されている場合はロールがチェックされ、ロールがuserに設定されている場合はlocalhost:8080/YourWebAppName/UserServletにリダイレクトされ、セッションがAdminに設定されている場合はlocalhost:8080/YourWebAppName/AdminServletにリダイレクトされます。

AdminとUserサーブレットの両方で、セッション変数がuser/adminに等しいかどうかを最初に確認します。

あなたは両方のサーブレットで共有したいメソッドがある場合は、第三サーブレットは、しかし、あなたがしたいと、その後UserServletとAdminServletはそのサーブレット

+0

はい、これは正解です。正しいと「確認」します。 しかし、Webアプリケーションでサーブレットを1つしか使用できない場合はどうなりますか?同じ解決策はありますか?新しいサーブレットは作成しませんか? – juniorIce

0

:メソッドが名を返すこと

protected String getActionSegment(HttpServletRequest request) { 
    String action = request.getRequestURI(). 
     replace(request.getContextPath() + 
      request.getServletPath(), ""). 
       replace("/", ""). 
        trim(); 
    return action.length() > 0 ? action : "index"; 
} 

:サーブレットコードで

<servlet-mapping> 
    <servlet-name>YourServletName</servlet-name> 
    <url-pattern>/YourServletName/*</url-pattern> 
</servlet-mapping> 

を私は方法持っていますアクションは、URLがlocalhost:8080/MyWebApp/MyServletの場合、デフォルトではindex.jspにリダイレクトされます(変更可能) サーブレットの実行方法では、各自で何をすべきか(およびリダイレクトする場所)を定義するだけです例:

if(action.equals("admin")) { 
     //do something 
    } else if (action.equals("user")) { 
     //do something else 
    } 

これがあなたが意味するものなのかどうか教えてください。 また、jspフォルダへのアクセスを制限し、サーブレットがjspにリダイレクトする場合にのみ動作させることもできます。

+0

私の解決策には近いですが、解決したいことはまだありません。ユーザーがログオンした後に "http:// localhost:8080/Myservlet/user" のようにブラウザにURLを書き込むサーブレットが必要です。そして、このユーザーがシステムで動作するとき、すべてのURLは "http:// localhost:8080/Myservlet/user/servlet?command = ......"のようになります。 /Myservlet/user/*など、ユーザーのフィルタにあるURL。 それは私が言ったことです。 – juniorIce

+0

私はあなたの:localhost:8080/Myservlet/user、 "user"にacctuallをユーザ名にログインさせたいと思っています。例えば、ユーザ名がNICKの誰かの場合は、localhost: 8080/Myservlet/Nick? – Stugal

+0

いいえ、いいえ。私は任意のユーザーのための "ユーザー"と、すべての管理者のための "管理者"を持っています。 – juniorIce

関連する問題