2011-08-20 2 views
7

방금 ​​grails를 사용하기 시작했고 spring-security 및 spring-security-ui 플러그인을 설치했습니다. 자습서 (here)를 따르고 있습니다. 응용 프로그램은 하나의 부트 스트랩 된 사용자로 시작합니다. meROLE_ADMIN 사용 권한이 있습니다.Grails/Spring Security : 새로 생성 된 사용자로 로그인 할 수 없습니다.

UI 덮어 쓰기 스크립트를 사용하여 등록 기능을 작동시킬 수 있었으며 정상적으로 작동합니다. 이제는 사용자 관리 스크립트 (grails s2ui-override user)를 설치하여 사용자를 추가, 편집, 제거하려고 시도했습니다.

새 사용자가 잘 생성되면 HSQLDB 인스턴스에 대해이를 확인했습니다. 그러나 이제 응용 프로그램에서 로그 아웃하고 새로 만든 사용자와 로그인하려고하면 제공된 사용자 이름과 암호로 사용자를 찾을 수 없다고 응용 프로그램에서 알려줍니다.

기본 로그 아웃 처리를 수정하지 않았으므로 문서가 세션을 무효화한다고 말하는 /j_spring_security_logout을 사용하고 있습니다.

이것은 알려진 문제입니까? 그렇다면이 문제를 어떻게 해결할 수 있습니까? 그렇지 않은 경우 어떻게하면이 문제를 디버그 할 수 있습니까?

EDIT :

이 문제는 또한 UI 첨가없이 지속된다. 새로운 사용자로 등록하십시오. 전자 메일 확인이 끝나면 사이트에 자동 로그인됩니다. 지금 로그 아웃하고 다시 로그인 해보십시오. 동일한 오류가 발생합니다.

최종 편집 :

UI를 플러그인은 여전히 ​​암호를 암호화하는 RegisterController와 함께 제공됩니다. 그러나 코어와 함께 제공되는 최신 도메인 클래스도이를 수행하고 있으므로 권장되는 방법은 컨트롤러가 없어야한다는 것입니다. 나는 기본적인 시나리오를 위해 인코딩과 로그인/로그 아웃이 이제는 작동하는 줄을 주석 처리했다.

+0

로그 아웃 후에 HSQLDB를 확인 했습니까?여전히 테이블에있는 사용자입니까? 내게 끈기 문제처럼 들렸습니다 – add9

+0

@imellan : 예, 사용자는 로그 아웃 한 후에도 여전히 테이블에 있습니다. 실제로 스프링 보안 UI를 사용하여 비밀번호를 재설정하고 새 비밀번호로 다시 로그인 할 수 있습니다. –

+0

springSecurityService.encodePassword()를 프로세스 내의 어딘가에서 사용합니까? – add9

답변

7

플러그인의

이전 버전의 도메인 클래스의 비밀번호 암호화 로직을 포함하지 않았다 튜토리얼에 대한 경고가 있지만, 코드를 많이 청소기를합니다.

나는 security-ui 플러그인이 변경 사항에 대해 알지 못하며, 암호화되지 않은 암호와 데이터베이스의 암호화 된 암호를 비교한다고 생각합니다.

+0

나는 그것을 의심합니다. 언급 한 추가 시나리오를 참조하십시오. UI 향상 없이도 이런 일이 발생합니다. –

+1

당신이 옳았습니다. UI 플러그인은 변경 사항으로 업데이트되지 않습니다. 위대한 캐치! RegisterController를 다시 살펴 봤는데 이것이 정확한 문제입니다! 내가 너보다 먼저 들었 으면 좋겠다. 감사합니다 :) –

+0

당신은 오신 것을 환영합니다. 나는 shiro plugin과 그 문서를 가지고 비슷한 문제를 가지고있다. –

3

내가 내 문제를 해결할 수있었습니다. 문제는 이중 암호화입니다. 41 번째 줄에있는 사용자 컨트롤러의 봄 보안 UI 아래에서 암호는 암호화되었고 다시 도메인 클래스에 의해 다시 로그인되므로 이중 암호화 된 암호와 암호화 된 단일 암호를 비교했습니다. 문제를 해결하기 위해 암호를 암호화 한 사용자 컨트롤러의 41 번째 줄을 주석 처리했습니다.

EDIT : 컨트롤러를 편집하기 위해 어디로 갈지 알아 내면 다운로드 한 플러그인의 소스 코드를 찾을 수 있습니다 사용자 홈의

/.grails/version/projects/projectname/plugins에서 편집

디렉토리 (적어도 맥/리눅스에 몰라, 당신은 창에서 찾을 할 위치).

+0

플러그인 디렉토리에서 다이빙을하고 파일을 편집하는 것이 가장 좋은 방법인지 잘 모르겠습니다. 영향을받는 클래스를 s2ui 스크립트를 사용하여 무시하고 대체 버전에서 필요한 변경을하는 것이 더 좋습니다. –

관련 문제