0

사용자가 로그인했는지 확인하고 싶습니다. 대부분의 프로젝트에 사용자가 로그인했는지 확인하기 위해 통합 요격기를 통합했습니다. 하지만 이것은 AJAX 요청과 잘 작동하지 않고 인터셉터의 모든 컨트롤러와 일치하면/static/**을 포함한 모든 컨트롤러에 필터가 적용됩니다.이 경우에는 제외해야합니다 (.excludes (uri : "/ 정적/** ")). 이것이 올바른 올바른 표준 방법인가?사용자가 grails Spring Security에 로그인했는지 확인하는 가장 좋은 방법은 무엇입니까?

LoginInterceptor() { 
     matchAll() 
       .excludes(controller: "login") 
       .excludes(controller: "signUp") 
       .excludes(uri: "/static/**") 
       .excludes(uri: "/assets/**") 
    } 
    boolean before() { 
     if (!springSecurityService.isLoggedIn()) { 
      flash.message="You need to login to access furthur pages" 
      redirect(controller: 'login',action: 'auth'); 
      return false 
     } 
     true 
    } 

    boolean after() { true } 

    void afterView() { 
     // no-op 
    } 

위의 코드는 AJAX 요청과 함께 작동하지 않습니다. AJAX와 WEB 요청 모두에서 잘 작동하는 제네릭 인터셉터는 어떻게 만들 수 있습니까? 그리고 이것은 로그인 요청을 모니터링하는 표준 방법입니까?

+0

'잘하지 못합니다'라는 말은 무엇을 의미합니까? 오류가 발생하거나 예기치 않은 결과가 나타납니다. 정확한 문제는 무엇일까요? – devbd

+0

@devbd 우선 JSON에 대한 ajax 요청은 인터셉터가 인증 페이지로 어떻게 리다이렉트 할 것인가입니다. 둘째, matchAll()에 대한 인터셉터를 적용하면/static/**도 필터링되어 사용자가 로그인했는지 여부를 확인하기위한 적절한 해결책이 아닌 것 같습니다. –

+0

JS 코드에서 Ajax 요청과 함께'redirect'를 처리해야합니다. 그런 다음 정확하게/static/**와 일치하는 URL이 있는지 확인하십시오.'/ static/**'과 같은 URL을 가지고 있다고 생각하지 않습니다. – devbd

답변

0

스프링 보안 플러그인을 사용하는 경우. 보안 구성을 구성하여이 작업을 수행 할 수 있습니다. 더 많이 찾을 수 있습니다 here

아약스 요청의 경우 반환 코드를 확인하고 == 403이면 사용자를 로그인 페이지로 리디렉션 할 수 있습니다.

+0

아약스 요청의 경우 : 권한이없는 페이지 인 경우 403 내 아약스 요청 ---- POSTXHR http : // localhost : 8080/home/index2 get me -------> [HTTP/1.1 302 Found 4ms] GETXHR http : // localhost : 8080/login/authAjax –

+0

@ujjwolshrestha 그래서 login/authAjax로 리디렉션됩니다. 맞습니까? docs에서 'adh.ajaxErrorPage'속성을 볼 수 있습니다. 어쩌면 그것은 당신을 도울 것입니다. – Koloritnij