0

jdbc-user-service を使用して春のセキュリティ ログインに取り組んでいます。Mysql では動作しますが、Oracle では動作しません。私はオラクル11 XEを使用しています。

タグで言及したクエリは、Oracle コンソールで実行すると期待される行が返されるため、正しいものです。

データソースは次のとおりです。

<bean id="dataSource"
    class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="${jdbc.driver}" />
    <property name="url" value="${datasource.url}" />
    <property name="username" value="${jdbc.user}" />
    <property name="password" value="${jdbc.password}" />
</bean>

sessionFactory では、オラクルの Bean 休止状態方言が与えられます。

<prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop>

同じコードは、Oracle ではなく mysql で機能します。アプリケーション コントロールは、Spring セキュリティ ファイルで設定したログイン ページにリダイレクトされます。これは、ユーザー名とパスワードを正しく取得していることを意味します。

<form-login login-page="/landing" default-target-url="/home"
        authentication-failure-url="/landing?msg=cw" />

spring security xml の認証プロバイダー コードは次のとおりです。

<authentication-manager>
    <authentication-provider>
    <jdbc-user-service data-source-ref="dataSource"
            users-by-username-query=" 
    select USERNAME as username, PASSWORD as password,'true' as enabled from 
    users where USERNAME=?"

            authorities-by-username-query=" select u.USERNAME 
    as username, r.ROLE as authority from users u, roles r, user_roles 
    ur where u.USER_ID = ur.USER_ID and ur.ROLE_ID = r.id and u.USER_ID = (SELECT 
    USER_ID from users where USERNAME = ?)" />

    </authentication-provider>
</authentication-manager>

春のセキュリティでオラクルを使用するために設定する必要があるものはありますか?

更新:春のセキュリティデバッグを設定しました。これは、ログインしようとした後に表示されるものです。

INFO : Spring Security Debugger - 

************************************************************

Request received for '/j_spring_security_check':

org.apache.catalina.connector.RequestFacade@7262b6

servletPath:/j_spring_security_check
pathInfo:null

  Security filter chain: [
  ConcurrentSessionFilter
  SecurityContextPersistenceFilter
  LogoutFilter
  UsernamePasswordAuthenticationFilter
  BasicAuthenticationFilter
  RequestCacheAwareFilter
  SecurityContextHolderAwareRequestFilter
  AnonymousAuthenticationFilter
  SessionManagementFilter
  ExceptionTranslationFilter
  FilterSecurityInterceptor
]


************************************************************


INFO : Spring Security Debugger - 

************************************************************

Request received for '/landing?msg=cw':

org.apache.catalina.connector.RequestFacade@bf1a4a

servletPath:/landing
pathInfo:null

Security filter chain: [
ConcurrentSessionFilter
SecurityContextPersistenceFilter
LogoutFilter
UsernamePasswordAuthenticationFilter
BasicAuthenticationFilter
RequestCacheAwareFilter
SecurityContextHolderAwareRequestFilter
AnonymousAuthenticationFilter
SessionManagementFilter
ExceptionTranslationFilter
FilterSecurityInterceptor
]


************************************************************
4

2 に答える 2

3

私は同じ問題を抱えていましたが、何時間もの調査の結果、解決策を見つけました。春のセキュリティのユーザーの詳細は、有効になっているブール値を必要とし、Oracle の「true」は機能しません。これを置き換えて修正します:

users-by-username-query=" 
select USERNAME as username, PASSWORD as password,'true' as enabled from 
users where USERNAME=?"

これに:

users-by-username-query=" 
select USERNAME as username, PASSWORD as password,1 as enabled from 
users where USERNAME=?"

できます!。ここを読んで解決策を見つけました。

于 2013-09-10T04:11:01.373 に答える
0

クラスパスに ojdbc6.jar または ojdbc14.jar (保留中の Oracle バージョン) があることを確認してください。

于 2012-11-07T10:44:57.557 に答える