2015-01-21 10 views
7

मैंने मिला निम्नलिखित वसंत सुरक्षा विन्यास:स्प्रिंग बूट: accessDeniedHandler काम नहीं करता है

@Configuration 
@EnableWebSecurity 
public class WebSecurityConfig extends WebSecurityConfigurerAdapter { 

    @Override 
    protected void configure(HttpSecurity http) throws Exception { 
     http.authorizeRequests().antMatchers("/api/private/**", "/app/**").authenticated(); 
     http.csrf().disable(); 
     http.logout().logoutSuccessUrl("/"); 
     http.exceptionHandling().accessDeniedPage("/403"); //.accessDeniedHandler(accessDeniedHandler); 
    } 
} 

मैं तर्क निम्नलिखित उम्मीद: नहीं authenitcated उपयोगकर्ताओं /403 पुनः निर्देशित किया जाएगा। उस वसंत के बजाय डिफ़ॉल्ट टोमकैट 403 पेज प्रदर्शित करता है। मैंने किसी भी सफलता के साथ कस्टम accessDeniedHandler भी कोशिश की।

मैं एक्सेस विफलता पर कस्टम तर्क कैसे कार्यान्वित कर सकता हूं?

उत्तर

15

AccessDeniedHandler केवल प्रमाणित उपयोगकर्ताओं पर लागू होता है। अनधिकृत उपयोगकर्ताओं के लिए डिफ़ॉल्ट व्यवहार लॉगिन पृष्ठ पर रीडायरेक्ट करना है (या उपयोग में प्रमाणीकरण तंत्र के लिए जो कुछ भी उचित है)।

आप बदलना है कि आप एक AuthenticationEntryPoint है, जो एक अप्रमाणित प्रयोक्ता किसी सुरक्षित संसाधन का उपयोग करने का प्रयास करते समय उत्पन्न होता है विन्यस्त करने की जरूरत चाहते हैं। आपको

http.exceptionHandling().authenticationEntryPoint(...) 

का उपयोग करने में सक्षम होना चाहिए जो आपके पास है। अधिक जानकारी के लिए, API docs देखें।

1

सामान्य वसंत सुरक्षा व्यवहार अनधिकृत उपयोगकर्ताओं को आपके लॉगिन पेज पर नीचे कॉन्फ़िगर किए गए रीडायरेक्ट करना है। प्रमाणित करता है उपयोगकर्ताओं को, जो अधिकृत नहीं हैं (न नियंत्रक भूमिका है) पहुँच से मना कर पृष्ठ के लिए निर्देशित किया जाएगा:

http.authorizeRequests().antMatchers("/admin/**") 
    .access("hasRole('ADMIN')") 
    .and().formLogin().loginPage("/login") 
    .and().exceptionHandling().accessDeniedPage("/403"); 

आप अपने खुद के प्रमाणीकरण तंत्र को लागू किया है और आप स्प्रिंग सुरक्षा विन्यास पर भरोसा नहीं कर रहे हैं अप्रमाणित देने के लिए तो उपयोगकर्ता आपके लॉगिन पेज पर, आप निम्नानुसार स्प्रिंग सुरक्षा कॉन्फ़िगरेशन खेल सकते हैं - वास्तविक लॉगिन पृष्ठ की बजाय अपने कस्टम 403 पृष्ठ की सेवा के लिए:

http.authorizeRequests().antMatchers("/admin/**") 
    .access("hasRole('ADMIN')") 
    .and().formLogin().loginPage("/403") 
    .and().exceptionHandling().accessDeniedPage("/403"); 
संबंधित मुद्दे