5

समस्या वक्तव्य: मेरा यूआई ऐप 9000 पोर्ट (ग्रंट प्रोजेक्ट) पर चल रहा है और 8421 बंदरगाह पर चल रहा मेरा सर्वर साइड स्प्रिंग बूट प्रोजेक्ट पर एंगुलरजेएस वसंत सुरक्षा लॉगिन/लॉगआउट। मैं लॉगिन और लॉगआउट को छोड़कर अपने यूआई ऐप से सभी यूआरएल को मारने में सक्षम हूं। कृपया मुझे बताएं कि मैं वसंत सुरक्षा लॉगिन और कोरस के साथ लॉगआउट कैसे कॉन्फ़िगर कर सकता हूं।क्रॉस-ओरिजिनल रिसोर्स शेयरिंग (सीओआरएस)

App.js

$scope.login = function() { 
     $http.post('http://localhost:8421/login', $.param($scope.credentials), { 
      headers : { 
      'content-type' : 'application/x-www-form-urlencoded' 
      } 
     }).success(function() { 
      console.log('login success'); 
      }); 
     }).error(function() { 
      console.log('login error'); 
     }); 
     }; 

SecurityConfiguration.java

public class SecurityConfiguration extends WebSecurityConfigurerAdapter { 

@Override 
    protected void configure(HttpSecurity http) throws Exception { 

     http.addFilterBefore(new SimpleCORSFilter(), ChannelProcessingFilter.class) 
     .authorizeRequests().antMatchers("/rest/**").permitAll() 
     .and().logout().logoutRequestMatcher(new AntPathRequestMatcher("/logout")) 
     .logoutSuccessUrl("/index.html")   
     .and().exceptionHandling().authenticationEntryPoint(authenticationEntryPoint)  
     .and().formLogin().successHandler(authenticationSuccessHandler) 
     .and().formLogin().failureHandler(authenticationFailureHandler)   
     .and().csrf().disable(); 
    } 

@Autowired 
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { 

     auth.userDetailsService(userDetailsService).passwordEncoder(new BCryptPasswordEncoder()); 
    } 
} 

SimpleCORSFilter.java

public class SimpleCORSFilter implements Filter { 
@Override 
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { 
     HttpServletRequest request = (HttpServletRequest) req; 
     HttpServletResponse response = (HttpServletResponse) res; 

     response.setHeader("Access-Control-Allow-Origin", "*"); 
     response.addHeader("Access-Control-Allow-Credentials", "true"); 
     response.setHeader("Access-Control-Allow-Methods", "POST, GET, PUT, OPTIONS, DELETE"); 
     response.setHeader("Access-Control-Max-Age", "3600"); 
     response.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); 

     chain.doFilter(req, res); 
    } 

    @Override 
    public void init(FilterConfig filterConfig) { 

    } 

    @Override 
    public void destroy() { 

    } 
} 

login.html

<form> 
<div class="rb-form-group" ng-class="{ 'has-error' : userForm.username.$invalid && !userForm.username.$pristine }"> 
      <input type="text" name="username" class="form-control" ng-model="credentials.username" placeholder="enter your username" required> 
     </div> 

     <!-- PASSWORD --> 
     <div class="rb-form-group" ng-class="{ 'has-error' : userForm.password.$invalid && !userForm.password.$pristine }"> 
      <input type="password" name="password" class="form-control" ng-model="credentials.password" placeholder="enter your password" required>   
     </div> 

     <div class="rb-form-group"> 
      <button class="btn btn-primary btn-block" ng-disabled="userForm.$invalid" ng-click="login()">Login</button>   
     </div> 
</form> 

अग्रिम

नेटवर्क लॉग

Remote Address:[::1]:8421 
Request URL:http://localhost:8421/login 
Request Method:POST 
Status Code:200 OK 
Response Headers 
view source 
Access-Control-Allow-Credentials:true 
Access-Control-Allow-Credentials:true 
Access-Control-Allow-Headers:Origin, X-Requested-With, Content-Type, Accept 
Access-Control-Allow-Methods:POST, GET, PUT, OPTIONS, DELETE 
Access-Control-Allow-Origin:* 
Access-Control-Max-Age:3600 
Cache-Control:no-cache, no-store, max-age=0, must-revalidate 
Content-Length:0 
Date:Tue, 17 Nov 2015 04:01:57 GMT 
Expires:0 
Pragma:no-cache 
Server:Apache-Coyote/1.1 
Set-Cookie:JSESSIONID=D22C05E81D4FC86EA32BD6545F2B37FF; Path=/; HttpOnly 
X-Content-Type-Options:nosniff 
X-Frame-Options:DENY 
X-XSS-Protection:1; mode=block 
Request Headers 
view source 
Accept:application/json, text/plain, */* 
Accept-Encoding:gzip, deflate 
Accept-Language:en-US,en;q=0.8 
Connection:keep-alive 
Content-Length:31 
content-type:application/x-www-form-urlencoded 
Host:localhost:8421 
Origin:http://localhost:9000 
Referer:http://localhost:9000/src/ 
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36 
+1

से फिल्टर

public class CORSFilter extends OncePerRequestFilter { private final Logger LOG = LoggerFactory.getLogger(CORSFilter.class); @Override protected void doFilterInternal(HttpServletRequest req, HttpServletResponse res, FilterChain chain) throws ServletException, IOException { res.setHeader("Access-Control-Allow-Origin", "*"); res.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS"); res.setHeader("Access-Control-Max-Age", "3600"); res.setHeader("Access-Control-Allow-Headers", "X-PINGOTHER,Content-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers,Authorization"); res.addHeader("Access-Control-Expose-Headers", "xsrf-token"); if ("OPTIONS".equals(req.getMethod())) { res.setStatus(HttpServletResponse.SC_OK); } else { chain.doFilter(req, res); } } } 

जोड़ने इसे आसान बनाएं और अपने वसंत वेब सर्वर के भीतर दृश्यपटल चलाने के लिए और एक ही बंदरगाह और प्रोटोकॉल का उपयोग करें। यदि आपको वास्तव में वास्तव में सीओआरएस का उपयोग करने की ज़रूरत है तो कृपया नेटवर्क लॉग पोस्ट करें। विशेष रूप से लॉगिन यूआरआई (विधियों: विकल्प और पोस्ट) के लिए अनुरोध – Michael

+0

@ माइकल: उत्तर के लिए धन्यवाद। मैंने लॉगिन के लिए नेटवर्क लॉग के साथ अपना प्रश्न अपडेट किया है। कृपया देख लीजिये। –

+0

हां, सीओआरएस आवश्यक है क्योंकि हम विभिन्न ग्राहकों के लिए एक ही उद्यम आवेदन बना रहे हैं। तो हमें सभी चीजों को खत्म करने की जरूरत है। –

उत्तर

1

जहां तक ​​CORS मुद्दे का संबंध है, तो कृपया जोड़ने authorization और client-security-token के रूप में नीचे Access-Control-Allow-Headers header करने के लिए धन्यवाद।

response.setHeader("Access-Control-Allow-Headers", "x-requested-with, Content-Type, origin, authorization, accept, client-security-token"); 

यह ठीक से काम करना चाहिए अगर आपके CORS फिल्टर ठीक से कॉन्फ़िगर किया गया है!

वसंत सुरक्षा में AJAX आधारित लॉगिन का उपयोग करने के लिए, आप थोड़ा अलग दृष्टिकोण का पालन करना चाहेंगे। यह यहां समझाया गया है:

आशा है कि यह मदद करता है, किसी भी मुद्दे के लिए टिप्पणी करने के लिए स्वतंत्र लग रहा है!

संबंधित मुद्दे

 संबंधित मुद्दे