私はthis repoでオープンソースプロジェクトを操作しています。ファイルbank.sql
は、mysqlのデータベースのスキーマです。Springセキュリティ:MySQL JDBC認証に失敗しました
<form name="loginForm" class="form-login"
action="<c:url value="/j_spring_security_check" />" method="POST">
<h2>Please sign in</h2>
<c:if test="${not empty error}">
<div class="alert alert-danger">${error}</div>
</c:if>
<c:if test="${not empty msg}">
<div class="alert alert-info">${msg}</div>
</c:if>
<input type="text" class="form-control" placeholder="Username" name="username">
<input type="password" class="form-control" placeholder="Password" name="password" />
<button type="submit" class="btn btn-lg btn-primary btn-block" name="submit">Login</button>
<input type="hidden" name="${_csrf.parameterName}"
value="${_csrf.token}" />
</form>
ファイルSpring-Security.xml
は以下の通りです::
<dependencies>
<!-- https://mvnrepository.com/artifact/org.apache.tomcat/juli -->
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>juli</artifactId>
<version>6.0.26</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>3.2.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>3.2.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>3.2.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-core</artifactId>
<version>3.2.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>3.2.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
<version>3.2.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>3.2.3.RELEASE</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>opensymphony</groupId>
<artifactId>sitemesh</artifactId>
<version>2.4.2</version>
</dependency>
</dependencies>
私は以下のようにログインフォームを持っている:
<beans:beans xmlns="http://www.springframework.org/schema/security"
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.0.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security-3.2.xsd">
<http auto-config="true" use-expressions="true">
<intercept-url pattern="/admin**" access="hasRole('ROLE_ADMIN')" />
<intercept-url pattern="/user**" access="hasAnyRole('ROLE_USER', 'ROLE_ADMIN')" />
<intercept-url pattern="/change**" access="hasRole('ROLE_NEWUSER')" />
<access-denied-handler error-page="/403" />
<form-login
login-page="/login"
authentication-success-handler-ref="bankCustomAuthenticationSuccessHandler"
authentication-failure-url="/login?error"
username-parameter="username"
password-parameter="password" />
<logout logout-success-url="/login?logout" />
<!-- enable csrf protection -->
<csrf/>
</http>
<beans:bean id="bankCustomAuthenticationSuccessHandler"
class="ee.mikkelsaar.bank.security.MyUrlAuthenticationSuccessHandler" />
<authentication-manager>
<authentication-provider>
<password-encoder hash="sha" />
<jdbc-user-service data-source-ref="dataSource" users-by-username-query="select username,password, enabled from users where username=?" authorities-by-username-query="select u.username, a.authority from users u, authorities a where u.username = a.username and u.username =?" />
</authentication-provider>
</authentication-manager>
<beans:import resource="spring-datasource.xml" />
<beans:bean id="passwordEncoder" class="org.springframework.security.authentication.encoding.MessageDigestPasswordEncoder">
<beans:constructor-arg value="sha" />
</beans:bean>
</beans:beans>
とデータソースを取得するために豆がある。ここpom.xml
があります以下のようにAuthentication-manager
に提供してください。
MySQLサーバーがポート3306で正常に動作していることを確信しています。
正しい資格情報はusername:Tom
とpassword:Tom
ですが、ログインするたびに失敗します。私は疑問に思っています、私の認証プロセスに何が間違っていますか?
どうすれば修正できますか?
おそらく、データソースBeanが正しく作成されていないかもしれませんが、確認する方法がわかりません。
アップデート:私は私のSpring-Security.xml
に<http security="none" pattern="/login"/>
を追加すると
それは
HTTP Status 405 - Request method 'POST' not supported for (username, password) `(Tom, tom)`, which is not a valid credential. But for a valid credential like `(Tom,Tom)` is still navigates to the login page again.
と文句を言うが、それは春のセキュリティのすべてのの
まず、「失敗する」とはどういう意味ですか?何かエラーが出ますか?はいの場合、スタックトレースを投稿してください。または、同じログインページに再度リダイレクトされるだけですか?2番目:自分のログインページのセキュリティが無効になっているとは思われません。あなたの既存の ''要素のすぐ上の 'Spring-Security.xml'に次の' 'を追加してみてください。 –
また、 'org.springframework.security'パッケージ –
@RomanPuchkovskiyのDEBUGロギングを有効にしてみてください。失敗すると、ログインページに再び移動します。あなたの答えで私の質問を更新しました –