tomcat spring など

Spring2 security 5.5

Basic認証とForm認証を同時に


@Configuration
@EnableWebSecurity
@Order(Ordered.HIGHEST_PRECEDENCE)
public class SecurityBasicAuthConfig extends WebSecurityConfigurerAdapter {
	@Autowired
	CustomUserDetailsService userDetailsService;
	
	@Bean
    public UserDetailsService mongoUserDetailsBasicAuth() {
        return new CustomUserDetailsService();
    }
    @Bean
	public PasswordEncoder getPasswordEncoderBasicAuth() {
	    return new BCryptPasswordEncoder();
	}
    @Override
    protected void configure(HttpSecurity http) throws Exception {
    	http.antMatcher("/xxx/admin/**"); 

		http.authorizeRequests().anyRequest().authenticated(); 
		http.httpBasic(); 
		http.csrf().disable();
    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        UserDetailsService userDetailsService = mongoUserDetailsBasicAuth();
        auth
            .userDetailsService(userDetailsService)
            .passwordEncoder(getPasswordEncoderBasicAuth());

    }
} // end class

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
	@Autowired
	CustomUserDetailsService userDetailsService;
	@Bean
    public UserDetailsService mongoUserDetails() {
        return new CustomUserDetailsService();
    }
    @Bean
	public PasswordEncoder getPasswordEncoder() {
	    return new BCryptPasswordEncoder();
	}
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
        ・・・以下、form認証の設定
        @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        UserDetailsService userDetailsService = mongoUserDetails();
        auth
            .userDetailsService(userDetailsService)
            .passwordEncoder(getPasswordEncoder());

    }
} // end class

@Order(Ordered.HIGHEST_PRECEDENCE)をBasic認証に付けることとgetPasswordEncoder() mongoUserDetails()の名称を変える点が重要です。

Debian4.0(etch)にtomcat5.5をインストール。GNOMEからsynaptic パッケージマネージャでインストールが可能に!

インストール手順

  • リポジトリにnon-freeを設定。
  • ftp.debian.orgにはデフォルトでmainしか入っていないので、設定->リポジトリからftp.debian.orgを選択し、編集ボタンをクリック。コンポーネントのmainの横にスペースを入れてnon-freeと記述する。

  • JDKをインストール。
  • sun-java5-jdkをインストール

  • tomcat5.5をインストール
  • apache2.2と接続
  • mod_proxy_ajpというmoduleで接続します。

    a2enmod mod_proxy_ajp

    apache2.2を再起動後、8009ポートで利用可能になってます。

  • このままだとセキュリティでうまく自分のモジュールが立ち上がらないので、セキュリティの設定をOFF
  • vi /etc/init.d/tomcat5.5

    TOMCAT5_SECURITY=yes -> #TOMCAT5_SECURITY=yes

mod_jk virtualhost 設定手順

mod_jk2ならworkers.propertiesにuriですぐ指定出来るが、mod_jkでの設定手順を記載します。
xxx1.comとxxx2.comの両サイトのROOTとして設定する場合です。
※CATALINA_HOME が /var/lib/tomcat5.5 の場合

  • ${CATALINA_HOME}conf/server.xml
  • 初期で、Hostに「localhost」を使っている場合、Hostタグを削除。

  • webappの設置
  • ${CATALINA_HOME}webapp/にコンテキスト名で xxx1 xxx2を設置。
    ※ROOTは無いこと。Context pathがROOTを優先してしまうため。

  • Hostタグの記載
  • <Host name="www.xxx1.com" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> <Context path="/" reloadable="true" docBase="xxx1" workDir="/tmp/tomcat5.5/xxx1" privileged="true" debug="1"/> </Host>
    <Host name="www.xxx2.com" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> <Context path="/" reloadable="true" docBase="xxx2" workDir="/tmp/tomcat5.5/xxx2" privileged="true" debug="1"/> </Host>

  • apache2の設定
  • DocumentRoot がwebappを設置した場所になるように設定。
    ServerName xxx1.com
    DocumentRoot /var/lib/tomcat5.5/webapps/xxx1

    ServerName xxx2.com
    DocumentRoot /var/lib/tomcat5.5/webapps/xxx2

2008.10.27