के साथ वसंत बूट और सुरक्षा मैं वसंत सुरक्षा के लिए एक कस्टम AngularJS लॉगिन पृष्ठ लागू कर रहा हूं, और मुझे प्रमाणीकरण के मुद्दे हैं।कस्टम AngularJS लॉगिन पृष्ठ
मैं इस ट्यूटोरियल/उदाहरण का अनुसरण कर रहा हूँ, और उनके उदाहरण ठीक स्थानीय स्तर पर काम करता है: https://github.com/dsyer/spring-security-angular/tree/master/single
हालांकि, जब मैं इस अपने आप को लागू करने के लिए प्रयास करते हैं, मैं प्रमाणित करने के लिए सक्षम नहीं हूँ, और मुझे यकीन है कि जहां नहीं कर रहा हूँ मेरी गलती है
एक पोस्ट को क्रेडेंशियल्स के साथ/लॉगिन करने के लिए बनाया जाता है, (कर्ल उदाहरण के समान है), और मुझे जीईटी/लॉगिन/पर रीडायरेक्ट के साथ 302 मिला है, जो 404 नहीं मिला है।
जब मैं/लॉगिन करने के लिए पोस्ट करने की कोशिश, स्प्रिंग किसी भी डीबग लॉग उत्पन्न नहीं करता है, तो मुझे यकीन है कि यह कैसे 302
मेरे कोड यहां पाया जा सकता सेवारत है नहीं कर रहा हूँ: https://github.com/AndrewBell/spring-angular-starter/tree/master
उल्लेखनीय परिवर्तन (और सबसे अधिक संभावना मेरी मुद्दों के स्रोत):
फ़ाइल संरचना बदल जाती
का उपयोग करते हुए सख्ती से कोणीय (कोई jQuery) - कौन सा/wro4j
कोणीय कोड स्टाइल के बजाय बोवर का उपयोग करते हुए पोस्ट अनुरोध
बनाने के लिए आवश्यक एक अलग समारोह में परिणाम देखते हुए
कई संबंधित वसंत सुरक्षा प्रश्नों का सुझाव है कि POST अनुरोध को गलत तरीके से स्वरूपित किया गया है, लेकिन मेरा उदाहरण उदाहरण के समान होता है (कम से कम जब मैं क्रोम देव कंसोल में कर्ल की प्रतिलिपि बनाता हूं)। अन्य कस्टम प्राधिकरण प्रदाताओं को लागू करने का सुझाव देते हैं, लेकिन उदाहरण में इसकी आवश्यकता नहीं है, इसलिए मैं इस बात से परेशान हूं कि मेरा और उदाहरण के बीच क्या अंतर है। मुझे स्टैक एक्सचेंज में मदद करें, आप मेरी एकमात्र आशा है।
देव उपकरण: imgurDOTcom/एक/B2KmV
प्रासंगिक कोड:
login.js
'use strict';
angular
.module('webApp')
.controller('LoginCtrl', ['$root`enter code here`Scope', '$scope', '$http', '$location', '$route', function($rootScope, $scope, $http, $location, $route) {
console.log("LoginCtrl created.");
var vm = this;
vm.credentials = {
username: "",
password: ""
};
//vm.login = login;
$scope.tab = function(route) {
return $route.current && route === $route.current.controller;
};
var authenticate = function(callback) {
$http.get('user').success(function(data) {
console.log("/user success: " + JSON.stringify(data));
if (data.name) {
console.log("And Authenticated!");
$rootScope.authenticated = true;
} else {
console.log("But received invalid data.");
$rootScope.authenticated = false;
}
callback && callback();
}).error(function(response) {
console.log("/user failure." + JSON.stringify(response));
$rootScope.authenticated = false;
callback && callback();
});
};
authenticate();
$scope.login = function() {
var data2 = 'username=' + encodeURIComponent(vm.credentials.username) +
'&password=' + encodeURIComponent(vm.credentials.password);
$http.post('login', data2, {
headers : {
'Content-Type': 'application/x-www-form-urlencoded'
}
}).success(function() {
authenticate(function() {
if ($rootScope.authenticated) {
console.log("Login succeeded");
$location.path("/");
$scope.error = false;
$rootScope.authenticated = true;
} else {
console.log("Login failed with redirect");
$location.path("/login");
$scope.error = true;
$rootScope.authenticated = false;
}
});
}).error(function() {
console.log("Login failed");
$location.path("/login");
$scope.error = true;
$rootScope.authenticated = false;
})
};
$scope.logout = function() {
$http.post('logout', {}).success(function() {
$rootScope.authenticated = false;
$location.path("/");
}).error(function() {
console.log("Logout failed");
$rootScope.authenticated = false;
});
}
}]);
application.java
0,123,package com.recursivechaos.springangularstarter;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.security.SecurityProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.annotation.Order;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.web.csrf.CsrfFilter;
import org.springframework.security.web.csrf.CsrfToken;
import org.springframework.security.web.csrf.CsrfTokenRepository;
import org.springframework.security.web.csrf.HttpSessionCsrfTokenRepository;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.filter.OncePerRequestFilter;
import org.springframework.web.util.WebUtils;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.security.Principal;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
@SpringBootApplication
@RestController
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@RequestMapping("/user")
public Principal user(Principal user) {
return user;
}
@RequestMapping("/resource")
public Map<String, Object> home() {
Map<String, Object> model = new HashMap<>();
model.put("id", UUID.randomUUID().toString());
model.put("content", "Hello World");
return model;
}
@Configuration
@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)
protected static class SecurityConfiguration extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.
formLogin().
//loginPage("/#/login").
and().
logout().
and().
authorizeRequests().
antMatchers("/index.html", "/home/**", "/login/**", "/bower_components/**", "/", "/main.js", "/login/", "/navigation/**","/login","login/","/login.html").
permitAll().
anyRequest().
authenticated().
and().
csrf().
csrfTokenRepository(csrfTokenRepository()).
and().
addFilterAfter(csrfHeaderFilter(), CsrfFilter.class);
}
private Filter csrfHeaderFilter() {
return new OncePerRequestFilter() {
@Override
protected void doFilterInternal(HttpServletRequest request,
HttpServletResponse response, FilterChain filterChain)
throws ServletException, IOException {
CsrfToken csrf = (CsrfToken) request.getAttribute(CsrfToken.class
.getName());
if (csrf != null) {
Cookie cookie = WebUtils.getCookie(request, "XSRF-TOKEN");
String token = csrf.getToken();
if (cookie == null || token != null
&& !token.equals(cookie.getValue())) {
cookie = new Cookie("XSRF-TOKEN", token);
cookie.setPath("/");
response.addCookie(cookie);
}
}
filterChain.doFilter(request, response);
}
};
}
private CsrfTokenRepository csrfTokenRepository() {
HttpSessionCsrfTokenRepository repository = new HttpSessionCsrfTokenRepository();
repository.setHeaderName("X-XSRF-TOKEN");
return repository;
}
}
}
अगर आपको रीडायरेक्ट किया जाता है/लॉगिन होता है तो इसका मतलब है कि आपको प्रमाणित नहीं किया गया है (लेकिन यह 404 नहीं होना चाहिए ताकि यह अजीब हो)। एक्सेस निर्णय के बारे में अधिक विस्तृत जानकारी प्राप्त करने के लिए आप 'org.springframework.security' के लिए डीबग लॉगिंग पर स्विच कर सकते हैं (मुझे उम्मीद है कि प्रमाण-पत्र किसी भी तरह से खराब थे), उदा। 'logging.level.org.springframework.security = DEBUG' को 'एप्लिकेशन में सेट करें। [गुण, yml]'। –
@ डेवसियर लॉग के माध्यम से देख रहे हैं, मुझे एक पोस्ट देखने के लिए प्रतीत नहीं होता है/लॉगिन मैं कैसे सत्यापित कर सकता हूं कि वसंत पोस्ट/लॉगिन को संभालने में सक्षम है? http://pastebin.com/GeUkCUvg – Andrew
यह एक पथ समस्या (या संभवतः गुंजाइश) प्रतीत होता है, क्योंकि मैं आपके "सिंगल" प्रोजेक्ट को जिथब उदाहरणों से खींचने में सक्षम था, wro4j को हटाता हूं, और निम्न के साथ प्रतिस्थापित करता हूं बोवर निर्भरताएँ: "कोणीय": "^ 1.3.0", "कोणीय संसाधन": "^ 1.3.0", "कोणीय बूटस्ट्रैप": "~ 0.12.0", "बूटस्ट्रैप-सीएसएस-ओनली": "~ 3.3.2", "कोणीय मार्ग": "~ 1.3.11" और उपयोग ... var req = 'username =' + ($ scope.credentials.username) + = '+ ($ scope.credentials.password); $ http.post ('लॉगिन', अनुरोध .... ठीक काम करने के लिए लगता है – Andrew