質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.33%

  • Java

    14430questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • Spring

    735questions

    Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

  • Spring Security

    26questions

Spring Securityの複数ログイン画面の実装方法について

受付中

回答 0

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 470

takoyaki-g

score 4

皆様初めまして

私は現在、Spring3.2の既存のシステムの改修に関わっています。
そこで既存のログイン画面とは別にログイン画面を設け、新しいログイン画面(管理者用)からは別の認証方法でログインをさせるという処理を実装をしている部分でつまづいております。

以下、Spring security3.2のソースになります

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/security"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:beans="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
    http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
    http://www.springframework.org/schema/security
    http://www.springframework.org/schema/security/spring-security-3.2.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context.xsd">

    <!-- 静的リソースは認証対象外 -->
    <http pattern="/resources/**" security="none"/>
    <!-- APIリソースは認証対象外 -->
    <http pattern="/api/**" security="none"/>
    <!-- Login画面は認証対象外 -->
    <http pattern="/user/login*" security="none" />
    <http pattern="/user/login/error*" security="none" />

    <!-- 管理者用の設定 start -->
    <http pattern="/admin**" auto-config="false" entry-point-ref="loginUrlAuthenticationEntryPoint" >
        <custom-filter
            position="FORM_LOGIN_FILTER"
            ref="applicationUsernamePasswordAuthenticationFilter" />
        <logout logout-url="/user/logout" logout-success-url="/user/login?timeout=false" invalidate-session="true" />
    </http>
    <!-- 管理者用の設定 end -->

    <http auto-config="true" authentication-manager-ref="userAuthenticationManager">
        <intercept-url pattern="/**" access="ROLE_ADMIN,ROLE_USER" />
    <!-- ユーザの設定 -->
        <form-login
            login-page="/user/login?timeout=false"
            default-target-url="/user/index"
            authentication-failure-url="/user/login/error?errorType=typeMiss"
            login-processing-url="/j_spring_security_check"
            always-use-default-target="true" />
        <logout logout-url="/user/logout"
            logout-success-url="/user/login?timeout=false"
            invalidate-session="true" />
        <anonymous granted-authority="ROLE_ANONYMOUS" />
        <access-denied-handler error-page="/user/login/error?errorType=noAuthority" />
    </http>

    <context:property-placeholder location="classpath:jdbc.properties"/>

    <!-- データソースの設定 -->
    <beans:bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <beans:property name="driverClassName" value="${jdbc.driverClassName}" />
        <beans:property name="url" value="${jdbc.url}" />
        <beans:property name="username" value="${jdbc.username}" />
        <beans:property name="password" value="${jdbc.password}" />
    </beans:bean>

    <authentication-manager id="userAuthenticationManager">
        <authentication-provider>
            <password-encoder hash="sha-256" >
                <salt-source user-property="username"  />
            </password-encoder>

            <jdbc-user-service data-source-ref="dataSource"
                users-by-username-query="
                     select
                         login_id as username
                         , login_password as password
                         , true as enabled
                     from
                         m_login
                     where
                         login_id=?
                         and delete_flg = 0"
                authorities-by-username-query="
                    select
                        login_id as username
                        , login_authority as authority
                    from
                        m_login
                    where
                        login_id=?" />
        </authentication-provider>
    </authentication-manager>

    <beans:bean id="userDetailsService" class="org.springframework.security.core.userdetails.jdbc.JdbcDaoImpl">
        <beans:property name="dataSource" ref="dataSource"/>
    </beans:bean>


    <beans:bean id="loginUrlAuthenticationEntryPoint" class="org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint">
        <beans:constructor-arg value="/admin/test" />
    </beans:bean>

    <beans:bean id="applicationUsernamePasswordAuthenticationFilter" class="com.capitarise.xxxx.admin.filter.ApplicationUsernamePasswordAuthenticationFilter">
        <beans:property name="authenticationManager" ref="adminAuthenticationManager" />
        <beans:property name="authenticationSuccessHandler" ref="authenticationSuccessHandler" />
        <beans:property name="authenticationFailureHandler" ref="authenticationFailureHandler" />
        <beans:property name="filterProcessesUrl" value="/authentication" />
    </beans:bean>

    <beans:bean id="authenticationSuccessHandler" class="org.springframework.security.web.authentication.SimpleUrlAuthenticationSuccessHandler">
        <beans:property name="defaultTargetUrl" value="/admin/check"/>
    </beans:bean>

  <!-- 気になる箇所① -->
    <beans:bean id="authenticationFailureHandler" class="org.springframework.security.web.authentication.ExceptionMappingAuthenticationFailureHandler">
        <beans:property name="defaultFailureUrl" value="/admin/test"/>
    </beans:bean>

    <authentication-manager alias="adminAuthenticationManager">
        <authentication-provider ref="applicationUsernamePasswordAuthenticationProvider" />
    </authentication-manager>

    <beans:bean id="applicationUsernamePasswordAuthenticationProvider" class="com.capitarise.xxxx.admin.provider.ApplicationUsernamePasswordAuthenticationProvider">
    </beans:bean>

</beans:beans>

上記のように修正し「/admin/test」のURLを叩いてみたところ、上記の「ユーザの設定」に記載されている「/user/login?timeout=false」に飛んでしまいました。
私の認識としては、「/admin」の場合は「気になる箇所①」で設定した「/admin/test」に、
それ以外は「/user/login?timeout=false」が最初に開かれる想定であったのですが、私の認識が間違っているようでした・・

どの部分を直せば想定通り「/admin/test」からログインページを開き別の処理を行えるのか、ご存知の方がいらっしゃいましたら、ご教授願えますでしょうか?
宜しくお願い致します。

Springのバージョン:3.2.2
Spring Security:3.2.10
参考サイト

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

  • mts10806

    2018/07/24 22:02 編集

    宿題・宿題代行サイトではないので「課題」と書いてしまうと回答を躊躇う回答者も多いです(自分でやらないと意味がない・身にならないというスタンス。もちろん仕事であっても作業依頼を請け負う場でもないので同様です。) 「質問するときのヒント」を熟読し、もう少し質問の書き方を工夫してみてください。質問は編集することができるので、質問タイトル・本文を調整してください。 https://teratail.com/help/question-tips

    キャンセル

  • takoyaki-g

    2018/07/25 09:59

    >mts10806 様 ご指摘いただきありがとうございます。本文及びソースを修正しました。

    キャンセル

まだ回答がついていません

同じタグがついた質問を見る

  • Java

    14430questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • Spring

    735questions

    Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

  • Spring Security

    26questions