2017-05-03 37 views
-2

こんにちは、私は春のMVC webbアプリを持っており、認証マネージャーとしてjdbc-user-serviceを使用しています。私はすべてが設定されているとログインに成功イムは../homeにリダイレクトした後、(私はする必要がありますように)、それは私の名前を書くべきではなく、それは書くログイン成功後、Spring MVCセキュリティアクセスが拒否されました

春のxmlファイル `

<http auto-config="true"> 
    <intercept-url pattern="/home" access="hasRole('ROLE_USER, ROLE_ADMIN')"/> 
    <intercept-url pattern="/home/**" access="hasRole('ROLE_USER, ROLE_ADMIN')"/> 
    <intercept-url pattern="/" access="permitAll"/> 
    <intercept-url pattern="/login" access="permitAll"/> 


    <form-login 
     login-processing-url="/j_spring_security_check" 
     login-page="/login" 
     authentication-success-handler-ref="authenticationSucessHandler" 
     authentication-failure-url="/login/error" 
     username-parameter="userName" 
     password-parameter="userPassword" 
     always-use-default-target="true"/> 
    <logout 
    invalidate-session="true" 
    delete-cookies="JSESSIONID"/> 
    <csrf /> 
    <headers> 
     <frame-options policy="SAMEORIGIN"/> 
    </headers> 
</http> 

<beans:bean name="authenticationSucessHandler" class="sk.icz.log.viewer.security.AuthenticationSuccessHnadler"/> 

<authentication-manager> 
    <authentication-provider> 

     <jdbc-user-service 
       data-source-ref="dataSource" 
       users-by-username-query="select username, pass, enable from PUBLIC.users where username=?" 
       authorities-by-username-query="select username, rol from PUBLIC.user_roles where username=?" 
     /> 
    </authentication-provider> 
</authentication-manager> 

<jdbc:embedded-database id="dataSource" type="HSQL"> 
    <jdbc:script location="classpath:db/schemaCreate.sql"/> 
    <jdbc:script location="classpath:db/addUser.sql"/> 
</jdbc:embedded-database> 

<beans:bean id="jdbcTemplate" class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate"> 
    <beans:constructor-arg ref="dbcpDataSource"/> 
</beans:bean> 

<beans:bean id="dbcpDataSource" class="org.apache.commons.dbcp2.BasicDataSource" 
     destroy-method="close"> 
    <beans:property name="driverClassName" value="org.hsqldb.jdbcDriver" /> 
    <beans:property name="url" value="jdbc:hsqldb:mem:dataSource" /> 
    <beans:property name="username" value="sa" /> 
    <beans:property name="password" value="" /> 
</beans:bean> 

<beans:bean depends-on="dataSource" class="org.springframework.beans.factory.config.MethodInvokingBean"> 
    <beans:property name="targetClass" value="org.hsqldb.util.DatabaseManagerSwing"/> 
    <beans:property name="targetMethod" value="main"/> 
    <beans:property name="arguments"> 
     <beans:list> 
      <beans:value>--url</beans:value> 
      <beans:value>jdbc:hsqldb:mem:SKUSKA</beans:value> 
      <beans:value>--user</beans:value> 
      <beans:value>sa</beans:value> 
      <beans:value>--password</beans:value> 
      <beans:value></beans:value> 
     </beans:list> 
    </beans:property> 
</beans:bean> 
を「アクセスが拒否されました」

`

schema_create.sql

create table users(
    username varchar(20), 
    pass varchar(20), 
    enable int 
); 
create table user_roles(
    username varchar(20), 
    rol varchar(20) 
); 

addUser.sql

insert into users values('admin', '123', 1); 

insert into user_roles values('admin', 'ROLE_USER'); 

私は(私はデータベースが間違って建てていることを知っている)私はちょうどこれを試してみたかった場合PFKEYSとリレーショナルデータベースを作成していない

答えて

1

編集

hasAnyRole(ロールのリスト) - ユーザに のいずれかのロールが指定されている場合は真(カンマで区切られた文字列のリスト)

hasRole春を使用して、あなたがhasAnyRoleを使用して、複数の役割を提供したいと思うあなたのケースでは、単一の役割を、期待しています。それの上にあなたは引用符を見逃した。これらの2行を修正し、それはあなたの問題を解決するかどうかを確認:へ

<intercept-url pattern="/home" access="hasRole('ROLE_USER, ROLE_ADMIN')"/> 
<intercept-url pattern="/home/**" access="hasRole('ROLE_USER, ROLE_ADMIN')"/> 

<intercept-url pattern="/home" access="hasAnyRole('ROLE_USER', 'ROLE_ADMIN')"/> 
    <intercept-url pattern="/home/**" access="hasAnyRole('ROLE_USER', 'ROLE_ADMIN')"/> 
から

変更

関連する問題