2011-11-28 4 views
1

/프로세스 사용자 자격 증명을 얻을 수 없습니다 보안 3.0 ....스프링 아래 언급 한 시나리오에 저를 도와주세요

의 ApplicationContext-security.xml

<authentication-manager> 
    <authentication-provider> 
    <jdbc-user-service data-source-ref="dataSource" 
     users-by-username-query="SELECT username, password FROM myLibrary.user WHERE username=?" /> 
    </authentication-provider> 
</authentication-manager> 

데이터베이스 엔드 (MySQL의)

CREATE TABLE `myLibrary`.`user` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `enabled` bit(1) DEFAULT NULL, 
    `fullName` varchar(255) DEFAULT NULL, 
    `password` varchar(120) DEFAULT NULL, 
    `username` varchar(40) NOT NULL, 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `id` (`id`), 
    UNIQUE KEY `username` (`username`) 
); 

XML 사용자

<user-service> 
    <user name="admin" password="amdin" authorities="supervisor, user" /> 
    <user name="counter1" password="counter1" authorities="user" /> 
</user-service> 

"dataSource"; 가치도 완벽합니다 ... !!! 어떤 로그에도 예외는 없습니다 .... 이는 라이브러리 통합이 완벽하다는 것을 의미합니다. 사실 XML 기반 사용자 정의를 사용하는 동안 그것은 훌륭하게 작동하지만 .... 데이터베이스 액세스에서는 실패합니다.

내 로그인 페이지가 그대로 유지됩니다. 나는 로그인 실패를 의미합니다. Pls 친구들을 도와 .... !!!!

그래서 당신이 true로 마지막 매개 변수를 추가 할 필요가 가능

  • 비밀번호
    • 이름 :

  • +0

    예외가없는 것이 확실합니다. 스프링 클래스에 대한 로깅 수준을 디버깅하도록 설정 했습니까? – flash

    +0

    정확한 로그인 출력 결과를 게시 하시겠습니까? 보안 설정도 게시하십시오. – Ralph

    +0

    고마워요 ... @flash ... 죄송합니다 ... 당신의 의견을 볼 수 없었습니다 .... 그리고 예 ** 예외가 없습니다 ** 그리고 전혀 혼란을 일으키고 있습니다 ... :) –

    답변

    0

    지연을 위해 ... .... 죄송합니다. 따라서 문제는 사용자를 담당하는 테이블에서 발생하며 users이어야합니다. 그리고 그것은 굉장히 달리고있다 ..... !!! 고마워 친구들 ..... 고마워 ... !!!!

    <authentication-manager> <authentication-provider>  <jdbc-user-service data-source-ref="dataSource"/> </authentication-provider> </authentication-manager> 
    

    위의 xml-lines 전에; 누구나 테이블 users과는 다른 테이블 authorities 필수가 users - username에 외부 키가 존재해야합니다 있는지 확인하십시오. 좋아 .. 나도 데이터베이스 부분을 넣어 .. !!

    CREATE TABLE `myLibrary`.`users` ( `id` int(11) NOT NULL AUTO_INCREMENT,  `enabled` bit(1) DEFAULT NULL,  `fullName` varchar(255) DEFAULT NULL,  `password` varchar(120) DEFAULT NULL,  `username` varchar(40) NOT NULL,  PRIMARY KEY (`id`),  UNIQUE KEY `id` (`id`),  UNIQUE KEY `username` (`username`) ); 
    
    CREATE TABLE `myLibrary`.`authorities` (
        `id` int(11) NOT NULL AUTO_INCREMENT, 
        `authority` varchar(255) NOT NULL, 
        `username` varchar(255) NOT NULL, 
        `allowed` bit(1) DEFAULT NULL, 
        PRIMARY KEY (`id`), 
        UNIQUE KEY `id` (`id`), 
        KEY `fk_username` (`username`), 
        CONSTRAINT `fk_username` FOREIGN KEY (`username`) REFERENCES `users` (`username`) ON DELETE NO ACTION ON UPDATE NO ACTION 
    ) ; 
    

    authorities(allowed)은 필수는 아니지만 .... 내 코드의 일부입니다. 사용자를 표시하고 싶기 때문에 사용 권한에 관계없이 모든 권한이 있습니다.

    나는 hibernate를 사용하고 그래서 내가 ID 필드를 얻고있다 ... 그것은 유용성에 관한 한의로 오프 물론 FAS 당신 개까지입니다.

    좋은 하루 되십시오 ... !!!!

    :)

    1

    당신은 JdbcDaoImpl 3 매개 변수를 기대하기 때문에, 조금 쿼리를 변경해야합니다 :

    <jdbc-user-service data-source-ref="dataSource" 
        users-by-username-query="SELECT username, password, true 
         FROM myLibrary.user WHERE username=?" /> 
    
    당신이 권한을 사용하는 경우, 당신은 또한 authorities-by-username-query (기본 제외 지정해야합니다 :

    불행하게도이 아주 잘 API를 설명되어 있지 않습니다,하지만 당신은 Btw는 org.springframework.security.core.userdetails.jdbc.JdbcDaoImpl


    source code 살펴해야 하나는 물론

    <jdbc-user-service 
        data-source-ref="dataSource" 
        users-by-username-query="SELECT username, password, true FROM myLibrary.user WHERE username=?" 
        authorities-by-username-query="SELECT username,authority from users WHERE username=?" 
    /> 
    

    이이 예입니다) 당신이 필요하고, 쿼리 가능성이 테이블에 대해 작동하지 않습니다!

    +0

    감사합니다 랄프 ..... 당신의 요점을 이해하지만 ... 내 qi = uestion은 "authority-by-username-query"없이 .... 내 접근법에 오류가 있습니까? ????? –

    +0

    BikahSahoo : 네 말이 맞아, 나는'xml-user' 권한을 읽지 않았다. 그러나 이제 더 흥미로운 질문은이 파일이 무엇인지에 대한 것입니다. 'jdbc-user-service'는 아무런주의를 기울이지 않을 것입니다 (내가 아는 운임) – Ralph

    +0

    음 ... ** jdbc 연결 **을 통해 ** spring-security **에 사용자 자격 증명을 제공하고 싶습니다. .. 그게 왜 ** jdbc-user-service ** .... !!!! 그리고 두 번째로 ... 신임장은 ** user ** table에있을 것입니다. 그래서 ** user-by-username-query **입니다. –

    관련 문제