2011-08-15 20 views
6

Yay güvenlik uygulamasını kullanarak, bir URL'lerin kimliği doğrulanmamış kullanıcıları bir 200 yanıt koduyla özel bir oturum açma formuna yönlendirecek şekilde bir güvenlik duvarı uygulamasını kullanarak nasıl yapılandırabilirim, diğer bir URL grubu ise web hizmetlerini yerine getiriyor ve bir 401 döndürmelidir. İstemci uygulamasının 401.URL başına grails/spring authentication şeması nasıl yapılandırılır?

'a cevaben bir kullanıcı adı ve parola ile isteği yeniden gönderebilmesi için yetkilendirilmemiş istemciler için yetkilendirilmiş yanıt yok. Geçerli yapılandırmam, özel giriş formuyla ilk durumu işleyebilir. Ancak, insan arabirimi için geçerli davranışı korurken, diğer arabirim kimlik doğrulaması yapılandırılmış arabirim URL'leri için yapılandırmam gerekir.

Teşekkürler!

cevap

0

Aynı sorunu yaşadım ve bunun için iyi bir çözüm bulamadım. Ben gerçekten temiz bir çözüm arıyorum (çok kiracı gibi bağlamda bir şey).

Oturum açma sayfasına yönlendirilmemesi gereken ikinci sistem için durumu ve oturum açma bölümünü manuel olarak doğruladım (bu nedenle "Güvenli" açıklama kullanmıyorum). Bunu, springSecurityService.reauthenticate() (elle giriş yapmak için), springSecurityService.isLoggedIn() kullanarak ve ikinci sistem için her denetleyicide el ile yaptım. Değilse, belirli bir sayfaya yönlendiriyorum.

Bu çalışmaların ikinci sisteminiz için uygun olup olmadığını bilmiyorum.

7

Yapmak istediklerimi doğru anladıysam, daha önce de aynı problemi yaşadım! ama Spring Security grails Plugin kullanarak çözmek kolaydır!

grails.plugins.springsecurity.useBasicAuth = true 

Yani dinlendirici hizmetler giriş çalışacağız ve işe doesnt eğer 401 gider: Yani, her şeyden önce, temel kimlik doğrulaması kullanacak şekilde ayarlayın zorunda! Bu kolay ama ayrıca giriş yapmak için özel bir form kullanmanız gerekiyor ?! Yani sadece bazı URL konfigürasyon dosyasında ki bu gibi normal giriş stratejisine alır: URL/api'sine gelen her şeyi,

grails.plugins.springsecurity.filterChain.chainMap = [ 
    '/api/**': 'JOINED_FILTERS,-exceptionTranslationFilter', 
    '/**': 'JOINED_FILTERS,-basicAuthenticationFilter,-basicExceptionTranslationFilter' 
] 

Yani fark Yukarıdaki/Temel Auth kullanın, ancak herhangi bir şey değildir edecektir/api/normal kimlik doğrulama giriş formunu kullanır!

DÜZENLEME

fazla bilgi http://burtbeckwith.github.com/grails-spring-security-core/docs/manual/guide/16%20Filters.html

+0

Eğer saat bu sizin için çalışmıyor neden anlamaya çalışıyorum israf diye Ayrıca, bu böcek tarafından ısırıldı dikkat edin: http://jira.grails.org/browse/GPSPRINGSECURITYCORE-210 – James

0

için Sen vatansız temel kimlik yapmalıdır gider. Bunun için lütfen kodunuzda aşağıdaki değişiklikleri yapın.
UrlMappings.groovy

"/api/restLogin"(controller: 'api', action: 'restLogin', parseRequest: true) 

Config.groovy

grails.plugin.springsecurity.useBasicAuth = true 
grails.plugin.springsecurity.basic.realmName = "Login to My Site" 
    grails.plugin.springsecurity.filterChain.chainMap = [ 
       '*'   : 'statelessSecurityContextPersistenceFilter,logoutFilter,authenticationProcessingFilter,customBasicAuthenticationFilter,securityContextHolderAwareRequestFilter,rememberMeAuthenticationFilter,anonymousAuthenticationFilter,basicExceptionTranslationFilter,filterInvocationInterceptor', 
       '/api/': 'JOINED_FILTERS,-basicAuthenticationFilter,-basicExceptionTranslationFilter' 
     ] 

resources.groovy

statelessSecurityContextRepository(NullSecurityContextRepository) {} 

    statelessSecurityContextPersistenceFilter(SecurityContextPersistenceFilter, ref('statelessSecurityContextRepository')) { 
    } 
    customBasicAuthenticationEntryPoint(CustomBasicAuthenticationEntryPoint) { 
     realmName = SpringSecurityUtils.securityConfig.basic.realmName 
    } 

    customBasicAuthenticationFilter(BasicAuthenticationFilter, ref('authenticationManager'), ref('customBasicAuthenticationEntryPoint')) { 
     authenticationDetailsSource = ref('authenticationDetailsSource') 
     rememberMeServices = ref('rememberMeServices') 
     credentialsCharset = SpringSecurityUtils.securityConfig.basic.credentialsCharset // 'UTF-8' 
    } 

    basicAccessDeniedHandler(AccessDeniedHandlerImpl) 

    basicRequestCache(NullRequestCache) 

    basicExceptionTranslationFilter(ExceptionTranslationFilter, ref('customBasicAuthenticationEntryPoint'), ref('basicRequestCache')) { 
     accessDeniedHandler = ref('basicAccessDeniedHandler') 
     authenticationTrustResolver = ref('authenticationTrustResolver') 
     throwableAnalyzer = ref('throwableAnalyzer') 
    } 

CustomBasicAuthenticationEntryPoint.harika

public class CustomBasicAuthenticationEntryPoint extends 
     BasicAuthenticationEntryPoint { 

    @Override 
    public void commence(HttpServletRequest request, 
         HttpServletResponse response, AuthenticationException authException) 
      throws IOException, ServletException {    
     response.sendError(HttpServletResponse.SC_UNAUTHORIZED); 
    } 

} 

ApiController

@Secured('permitAll') 
class ApiController { 
def springSecurityService 
@Secured("ROLE_USER") 
    def restLogin() {   
     User currentUser = springSecurityService.currentUser 
     println(currentUser.username) 
    } 
} 
İlgili konular