2012-05-08 10 views
10

मैं grails 2.0इकाई परीक्षण में वसंत सुरक्षा के खिलाफ उपयोगकर्ता को प्रमाणित करने के लिए कैसे

साथ वसंत सुरक्षा कोर प्लगइन (1.2.7) का उपयोग कर रहा है का कहना है कि मैं एक विधि @Secured एनोटेशन का उपयोग करता है के साथ नियंत्रक करते हैं।

class ArticleController { 
    def springSecurityService 

    @Secured(['ROLE_PREMIUM_USER']) 
    def listPremium() { 
     render 'premium content' 
    } 
} 

मेरी इकाई परीक्षण में मैं भूमिका 'ROLE_PREMIUM_USER' के साथ एक उपयोगकर्ता listPremium विधि की सामग्री देख सकते हैं परीक्षण करना चाहते हैं। मैं यह कैसे कर सकता हूँ?

मुझे पता है कि यह इस प्रकार शुरू कर देना चाहिए:

@TestFor(ArticleController) 
@Mock([SpringSecurityService]) 
class ArticleControllerTests { 
    void testListPremium() { 
    defineBeans { 
     springSecurityService(SpringSecurityService) 
    } 
     //but how to login the user here in order to see premium content? 

     controller.listPremium() 
     assert response.text() == 'premium content' 
    } 
} 

मुझे यकीन है कि मैं कैसे उपयोगकर्ता या नकली कार्रवाई कि ROLE_PREMIUM_USER की जाँच करता है प्रमाणित कर सकते हैं नहीं कर रहा हूँ। कोई मदद?

+0

इस प्लगइन पर एक नज़र डालें: [वसंत - सुरक्षा-नकली] (http://grails.org/plugin/spring-security-mock) – mpccolorado

+0

नियंत्रक.springSecurityServce.ifAnyGranted ("ROLE _PREMIUM_USER ") आपको ControllerUnitTestCase – allthenutsandbolts

उत्तर

5

आप का उपयोग करने के

SpringSecurityUtils.reauthenticate username, null 
+0

से अपनी कक्षा का विस्तार करना पड़ सकता है ऐसा लगता है कि लिंक टूटा हुआ है। –

+1

ऐसा लगता है कि उन्होंने कोड को दोबारा प्रतिक्रिया दी, मैंने लिंक तय किया – chrislovecnm

4

हम अपने कस्टम AuthenticationHelper बनाया सक्षम हो सकता है:

public final class AuthenticationHelper { 

    public static Authentication authenticate(UserDetailsService userDetailsServiceImpl, String userName) { 

     UserDetails userDetails = userDetailsServiceImpl.loadUserByUsername(userName); 

     UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(userDetails, userDetails.getPassword()); 

     UsernamePasswordAuthenticationToken result = new UsernamePasswordAuthenticationToken(userDetails, token.getCredentials(), userDetails.getAuthorities()); 
     result.setDetails(token.getDetails()); 
     Authentication auth = result; 

     SecurityContextHolder.getContext().setAuthentication(auth); 
     auth = SecurityContextHolder.getContext().getAuthentication(); 

     Assert.assertTrue(auth.isAuthenticated()); 

     return auth; 
    } 
} 

महत्वपूर्ण हिस्सा है:

SecurityContextHolder.getContext().setAuthentication(auth); 
संबंधित मुद्दे