我正在尝试使用angular和spring boot实现登录功能。
我正在学习Spring教程https://spring.io/guides/tutorials/spring-security-and-angular-js/但在我的例子中,angular项目托管在localhost:4200上,spring托管在localhost:8080上
现在我发送一个/user请求到Spring服务器。我的角代码看起来像:
const headers = new HttpHeaders(credentials ? {
authorization: 'Basic ' + btoa(credentials.username + ':' + credentials.password)
} : {});
this.http.get('http://localhost:8080'+'/user', { headers: headers }).subscribe(response => {
if (response['name']) {
this.authenticated = true;
} else {
this.authenticated = false;
}
return callback && callback();
});
现在因为CORS,它发送选项请求,状态为200,成功。在此之后,它不会发送实际的GET请求,该请求应该以$http发送选项而不是PUT/POST的形式发送凭据
我的spring代码如下所示:
@CrossOrigin(origins = "*", maxAge = 3600, allowedHeaders={"x-auth-token", "x-requested-with", "x-xsrf-token"})
@RequestMapping("/user")
public Principal user(Principal user) {
return user;
}
@Configuration
@Order(SecurityProperties.DEFAULT_FILTER_ORDER)
protected static class SecurityConfiguration extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.httpBasic().and().cors().and().authorizeRequests().antMatchers("/index.html", "/", "/home", "/login").permitAll()
.anyRequest().authenticated().and().csrf()
.csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse());
}
}
另外,我在pom文件中添加了Spring Security。
您能帮助找出为什么在OPTIONS请求后不触发GET请求吗?
根本原因:在Spring Security性中,您只允许三种类型的请求头,即allowedHeaders={“x-auth-token”、“x-requested-with”、“x-xsrf-token”}
但是,在你的http中。获取
request您正在使用头名称作为authorization
进行基本身份验证,但被Spring Security
拒绝。因此,spring将允许的标题响应到您的浏览器(即使用OPTIONS方法的飞行前请求),您的浏览器会看到。。哎呀<代码>授权头是不允许的,因此我无法继续最初的GET调用。
解决方案:在spring security中也允许授权
标题。它应该有用的。!!
问题内容: 我正在一个网站上,我们从XML文件中获取信息。效果很好,但是现在我需要对内容进行滑动。为此,我将使用jCarousel声明它们可以通过调用回调函数来处理动态加载的内容。 但是,当我成功调用函数时,无法进行初始的ajax加载。我究竟做错了什么? 我做错什么了吗?还是我必须去一个完全不同的地方?:-) 问题答案: 使用hulabula代替hulabula()或将函数直接传递给ajax选项:
这是一个经过验证的API,我试图调用...我可以看到,OPTIONs调用返回200 OK和适当的响应头,仍然火狐不发送API调用,完美地工作在Chrome...有什么想法吗 一些值隐藏在下面... 响应报头 HTTP/1.1 200 OK 访问-控制-允许-起源:* 访问-控制-允许-方法:[POST,GET] 访问-控制-允许-报头:授权 日期:周三,02 Oct 2013 20:52:02 G
我有一个springbootmicroservice,它包含一个我需要在每个星期天运行的方法,所以我在方法上使用@Scheduled注释,在配置类中使用@EnableScheduling注释。用@Scheduling注释的方法调用另一个方法,该方法反过来调用一个客户端类,在该类中,通过对另一个微服务进行rest调用获取响应,但rest调用步骤未执行,并且当我从控制器触发该方法时,当我使用计划注释时
问题内容: 我想知道为什么$(this)在jQuery ajax调用后不起作用。 我的代码是这样的。 为什么在ajax调用之后,$(this)在这种情况下不起作用?如果我在ajax之前使用它会起作用,但之后没有效果。 问题答案: 在jQuery ajax回调中,“ this”是对ajax请求中使用的选项的引用。它不是对DOM元素的引用。 您需要首先捕获“外部” $(this) :
为什么没有调用WelcomePage.html的请求处理程序? 如何调用请求处理程序?在Spring Security集成之前,它曾经工作过。spring security Integration之后也不会调用其他请求处理程序。 顺便说一下,spring security如何知道安全配置应该将所有请求转发给我的servlet。应用程序中可能有更多的servlet。form-login的login-