모든 컨트롤러의 이전 인터셉터에있는 AuthService
에서 authenticate()
메서드를 호출하는 필터를 사용하여 사용자 지정 인증 구성표를 구현했습니다. authenticate()
메서드는 groovy.sql.Sql
및 UserCredentialsDataSourceAdapter을 사용하여 데이터베이스에 연결을 시도한 다음 데이터베이스 사용자에게 적절한 역할이 있는지 확인합니다. 데이터베이스는 오라클이며 레거시 ERP의 일부이기 때문에 이것이 인증을 수행 할 수있는 유일한 방법입니다.매초마다 HTTP 500 응답
잘못된 자격 증명으로 요청을 제출할 때 발생하는 문제가 발생합니다. "ORA-01017: invalid username/password; logon denied"
을 포함하는 SQLException이 예상대로 발생합니다. 내 try/catch 블록은 catch 및 억제하고 코드는 요청을 거부 할 때 올바르게 진행됩니다. 그러나 다음 요청은 제공된 자격 증명에 관계없이 항상 500 응답의 SQLException을 반환합니다. 왜 그게 뭔지에 대한 모든 아이디어와 그것을 해결하기 위해 할 수있는 일은 무엇입니까?
def authenticate(def username, def password) {
def authorized = false
Sql sql
if (username != null && !username.equals('')) {
try {
dataSource.setCredentialsForCurrentThread(username, password)
sql = Sql.newInstance(dataSource)
def row = sql.firstRow("**SQL removed for privacy**")
if (row != null && row.has_permission == 1) {
authorized = true
}
} catch (Exception e) {
} finally {
sql.close()
}
}
return authorized
}
게시 된 코드에 오류가 표시되지 않았습니다. 사용자 이름과 비밀번호는 어디에서 왔습니까? 어쩌면 문제가있을 수 있습니다. –
username과 password가 params 맵에서 수집되어 authenticate 메소드에 전달되었습니다. 그것은 프레임 워크가 SQLException을 캡쳐하고 다음 요청까지 저장하는 것으로 보입니다. 그래도 기본 프레임 워크를 충분히 이해할 수는 없습니다. – Stuporman
나는 데이터 소스가 응용 프로그램에 대한 싱글 톤이라고 생각하기 때문에이 잘못된 사용자 이름과 암호를 설정 한 후에 잘못된 사용자 이름과 암호가 연결될 수있는 첫 번째 시도에서 연결을 얻으려고합니다. 따라서 예외가 발생하면 기본 사용자 이름과 암호로 돌아와야합니다. –