(Java 6およびTomcat 6を使用)。
HttpServletRequest.getRemoteUser()
アプリケーションのweb.xmlファイルを変更せずに、開発環境(localhost)で値を返す方法はありますか?
私が尋ねる理由は、アプリがリモート環境にデプロイされるときの認証の実装が、Webサーバーとプラグインツールによって処理されるためです。ローカルで実行しているので、プラグインツールや独立したWebサーバーはありません。Tomcat 6を使用しています。ローカルホストでの開発をサポートするためだけにアプリケーションにコードを追加しないようにしています。
リモートユーザーIDを設定したり、HTTPヘッダーなどからプルしたりするために、context.xmlまたはserver.xmlファイルに変更を加えることができるといいのですが。
Valve
これを実現する概念実証の実装を次に示します。
import java.io.IOException;
import java.security.Principal;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletException;
import org.apache.catalina.connector.Request;
import org.apache.catalina.connector.Response;
import org.apache.catalina.realm.GenericPrincipal;
import org.apache.catalina.valves.ValveBase;
public class RemoteUserValve extends ValveBase {
public RemoteUserValve() {
}
@Override
public void invoke(final Request request, final Response response)
throws IOException, ServletException {
final String username = "myUser";
final String credentials = "credentials";
final List<String> roles = new ArrayList<String>();
// Tomcat 7 version
final Principal principal = new GenericPrincipal(username,
credentials, roles);
// Tomcat 6 version:
// final Principal principal = new GenericPrincipal(null,
// username, credentials, roles);
request.setUserPrincipal(principal);
getNext().invoke(request, response);
}
}
(Tomcat 7.0.21でテスト済み。)
それをコンパイルし、jarの中に置き、jarをapache-tomcat-7.0.21/lib
フォルダーにコピーします。を変更する必要がありますserver.xml
:
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Valve className="remoteuservalve.RemoteUserValve" />
...
Engine
とContext
コンテナの内部でも動作すると思います。
詳しくは:
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加