2013-02-20 1 views
2

이봐 난 데 내 springsecurity 기반의 로그인으로 엉망 약간의봄 보안/최대 절전 모드 : 올바른 자격증 명?

나는 여기 내 사용자 테이블의 오류 "잘못된 자격 증명"

가 계속 해요!

[USERTABLE] [1 ]

는 여기의 ApplicationContext 내는 dataSource의 :

<!-- database driver/location --> 
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
    <property name="driverClassName" value="com.mysql.jdbc.Driver" /> 
    <property name="url" value="jdbc:mysql://localhost:3306/ams" /> 
    <property name="username" value="root" /> 
    <property name="password" value="root" /> 
</bean> 

내 SecurityContext에 :

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

    <!-- <security:http auto-config="true" access-decision-manager-ref="accessDecisionManager"> --> 
    <security:http auto-config="true"> 
     <security:intercept-url pattern="/login/login.do" access="IS_AUTHENTICATED_ANONYMOUSLY" /> 
     <security:intercept-url pattern="/login/doLogin.do" access="IS_AUTHENTICATED_ANONYMOUSLY" /> 
     <security:intercept-url pattern="/lib/**" access="IS_AUTHENTICATED_ANONYMOUSLY" /> 
     <security:intercept-url pattern="/css/**" access="IS_AUTHENTICATED_ANONYMOUSLY" /> 
     <security:intercept-url pattern="/images/**" access="IS_AUTHENTICATED_ANONYMOUSLY" /> 
     <security:intercept-url pattern="/resources/**" access="IS_AUTHENTICATED_ANONYMOUSLY" /> 
     <security:intercept-url pattern="/**" access="IS_AUTHENTICATED_REMEMBERED" /> 
     <security:form-login login-page="/login/login.do" authentication-failure-url="/login/login.do?login_error=true" default-target-url="/test/showTest.do"/> 
     <security:logout logout-success-url="/login/login.do" invalidate-session="true" /> 
     <security:remember-me key="rememberMe"/> 
    </security:http>  


    <security:authentication-manager> 
     <security:authentication-provider> 
      <security:jdbc-user-service data-source-ref="dataSource" 
      users-by-username-query="select USERNAME as username, PASSWORD as password, DELETED as deleted from ams.user where USERNAME=?" 
      authorities-by-username-query=" 
       select distinct user.USERNAME as username, permission.NAME as authority 
      from scu.user, scu.user_role, scu.role, scu.role_permission, scu.permission 
      where user.ID=user_role.USER_ID AND user_role.ROLE_ID=role_permission.ROLE_ID AND role_permission.PERMISSION_ID=permission.ID AND user.USERNAME=?"/> 
      <!-- security:password-encoder ref="passwordEncoder" /> --> 
     </security:authentication-provider> 
    </security:authentication-manager> 

    <bean id="passwordEncoder" 
     class="org.springframework.security.authentication.encoding.ShaPasswordEncoder"> 
     <constructor-arg value="256" /> 
    </bean> 
</beans> 

내가 로그인을 시도 : 그것은 나에게 나쁜 자격 증명을 오류를 제공 admin과 init01

... = (

는 모든 제안은 감사합니다!

답변

3

authentication-provider에있는 password-encoder 참조가 주석 처리되었습니다. 암호 해시 된 암호를 사용하는 경우 암호 인코더가 필요합니다 (필요한 경우). 또한 this answer을 점검하십시오. 특히 사용중인 암호 인코더가 데이터베이스에 저장된 암호와 일치하는지 테스트를 작성하는 것이 중요합니다.

일반 SHA 해시보다 안전한 방법으로 this answer on using bcrypt을 확인해야 할 수도 있습니다.

+0

해시 암호 인코더는 문제가 아니며 방금 주석 처리했습니다. 그래서 당신은 "진짜"암호가 실제로 무엇인지 알 수 있습니다 ... 내가 그것을 사용하거나 사용하지 않을 때 아무 것도 바뀌지 않습니다 –

+0

대부분 문제 일 수 있습니다. 그것이 없으면, 그것은 전혀 작동하지 않을 것이고 그것이 생성하는 문자열이 당신이 데이터베이스에 가지고있는 것과 정확하게 일치하지 않는다면 그것으로는 작동하지 않을 것입니다. 따라서 링크. 로그를 확인하십시오. 의심 스럽다면 디버거를 사용하고 중단 점을 설정하십시오 (https://github.com/SpringSource/spring-security/blob/master/core/src/main/java/org/springframework/security). /authentication/dao/DaoAuthenticationProvider.java#L84). 암호가 일치하지 않아 인증에 실패하면 해당 로그 메시지도 표시되어야합니다. –

+0

init01의 해시를 알고 있습니다. (다른 사용자와 함께 사용하는 것입니다.) 그리고 확실히 작동하지 않습니다. 감사합니다. 분명히 통과 할 것입니다. –

0

암호가 해시 중입니다. 암호 'init01'을 추가하면, 스프링은 제공된 암호를 해시하고 사용자가 입력 한 암호와 일치하므로 원래 암호의 해시가 'init01'임을 의미합니다. 그래서 SHA ('init01')는 'init01'이외의 것입니다

+0

아니요, 일반 텍스트로 작성 했으므로 입력 한 내용을 볼 수 있고 암호가 바뀌어도 아무 것도 변경되지 않습니다. –