1

次のようにapplicationContext.xmlで指定することにより、セキュリティで保護されたリソースセットの外部に保持されるサービスがほとんどないSpring(Spring Securityも)を使用するアプリケーションがあります。

<http pattern="/services/rest/nohisb/Msgs" security="none"/>

現在、これらのサービスにはhttps経由でのみアクセスする必要があります。コンテナはhttpsを持つように構成されています。要件は、ユーザーがhttpで上記のサービスにアクセスするときに、httpsにリダイレクトする必要があることです(デフォルトの443ではないため、ポート番号も変更されます)。

春を介してこれを達成することは可能ですか?


Nohsibに感謝 します

4

3 に答える 3

2

はい、SpringChannelProcessingとPortMapperを使用して実現すること可能です

http/httpsアクセスURLパターンを定義するために使用されるSpringChannelProcessing。例えば-

HttpsアクセスURL-

https://localhost/myapp/user/myaccount

Http:アクセスURL-

http://localhost/myapp/home

次に、ユーザーがhttpモード " http:// localhost / myapp / user / myaccount "スプリングチャネルセキュリティでセキュアURLにアクセスする場合、ユーザーをセキュアURL " https:// localhost / myapp / user/myaccount "にリダイレクトします。その逆も同様です。

PortMapper Beanは、HTTPおよびHTTPSマッピングに非標準のポート番号をマップするために使用されます

構成例:

チャネル処理Beanの定義とポートマッパー-

<bean id="channelProcessingFilter" class="org.springframework.security.web.access.channel.ChannelProcessingFilter">
  <property name="channelDecisionManager" ref="channelDecisionManager"/>
  <property name="securityMetadataSource">
        <security:filter-security-metadata-source path-type="ant">
            <security:intercept-url pattern="/services/rest/nohisb/Msgs**" access="REQUIRES_SECURE_CHANNEL" />
            <security:intercept-url pattern="/**/*.html**" access="REQUIRES_SECURE_CHANNEL" />

            <!-- more pattern definition -->

        </security:filter-security-metadata-source>
  </property>
</bean>

<bean id="channelDecisionManager" class="org.springframework.security.web.access.channel.ChannelDecisionManagerImpl">
  <property name="channelProcessors">
    <list>
        <ref bean="secureChannelProcessor"/>
        <ref bean="insecureChannelProcessor"/>
    </list>
  </property>
</bean>

<bean id="secureChannelProcessor" class="org.springframework.security.web.access.channel.SecureChannelProcessor">
    <property name="entryPoint" ref="secureEntryPoint"/>
</bean>

<bean id="insecureChannelProcessor" class="org.springframework.security.web.access.channel.InsecureChannelProcessor">
    <property name="entryPoint" ref="insecureEntryPoint"/>
</bean>

<bean id="secureEntryPoint" class="org.springframework.security.web.access.channel.RetryWithHttpsEntryPoint">
    <property name="portMapper" ref="portMapper"/>
</bean>

<bean id="insecureEntryPoint" class="org.springframework.security.web.access.channel.RetryWithHttpEntryPoint">
    <property name="portMapper" ref="portMapper"/>
</bean>

<bean id="portMapper" class="org.springframework.security.web.PortMapperImpl">
    <property name="portMappings">
        <map>
            <entry key="80" value="443"/>
            <entry key="8081" value="8443"/>
            <entry key="8443" value="8081"/>
            <!-- so on... -->
        </map>
    </property>
</bean>

フィルタマッピング-

<security:http auto-config="false" 
            entry-point-ref="authenticationProcessingFilterEntryPoint" 
            access-decision-manager-ref="accessDecisionManager" >

    <security:custom-filter position="CHANNEL_FILTER" ref="channelProcessingFilter"/>

    <security:intercept-url pattern="/*.html*" access="ROLE_ANONYMOUS,admin,user"  />
    <security:intercept-url pattern="/*.jsp" access="ROLE_ANONYMOUS,admin,user" />

    <!-- more pattern definition -->

</security:http>
于 2012-11-23T20:02:12.520 に答える
0

http://static.springsource.org/spring-security/site/docs/3.0.x/reference/ns-config.html#ns-requires-で説明されているように、SpringSecurity名前空間構成を使用する方が簡単ではないでしょうか。ポートマッピングを定義するチャネル?

于 2012-12-07T08:10:38.243 に答える
0

リクエストスキームとURLをチェックし、必要に応じてリダイレクトを送信するサーブレットフィルタを作成できます。しかし実際には、そのようなことはJavaコードではなく、リバースプロキシまたはバランサーで実行する必要があります。通常、サーブレットコンテナはプロキシ(nginx?)またはapache(mod_proxy)の背後で使用されます。これはhttps/httpリダイレクトなどを構成する場所です。

于 2012-11-22T20:08:50.977 に答える