Spring Security中登录后如何访问资源?

Posted

技术标签:

【中文标题】Spring Security中登录后如何访问资源?【英文标题】:How to access resources after login in Spring security? 【发布时间】:2017-07-30 16:22:31 【问题描述】:

我正在尝试学习 Spring 安全性,但遇到了问题。

我有一个前端项目和一个后端项目。

前端项目使用node.js http-server on localhost:8000

后端项目在 localhost:8090 上使用 Spring Boot Tomcat

我只是将 Spring Security 添加到我的后端项目中。

现在的问题是我登录 login.html,然后重定向到 index.html,但是在 index.html 中我想访问后端项目中的资源,但是 Spring 安全性总是给我 401 错误,如果我输入网址(例如http://localhost://8090/getName),浏览器会改变,并要求我输入用户名和密码。完成后,我输入另一个 url (http://localhost://8090/getName2),我直接得到了结果。而且好像我没有登录。我有什么问题?

这是我的 Spring 配置:

    @Override
protected void configure(HttpSecurity http) throws Exception

    http
            .httpBasic()
            .and()
            .authorizeRequests()
            .anyRequest().authenticated()
        ;


    @Override
public void configure(WebSecurity web) throws Exception 
    web.ignoring().antMatchers(HttpMethod.OPTIONS, "/**");

这是我的控制器

@RequestMapping("/login")
    String login(Principal principal)
        return principal.getName();
    

这是我前端登录页面的 js,我使用 angular-js

loginApp.controller('navigation', function($rootScope, $http, $location, $scope, $window) 

$scope.login = function() 
    var h = authorization : "Basic "+ btoa($scope.credentials.username + ":" + $scope.credentials.password)                ;
    $http.get('http://localhost:8090/login/',headers : h).then(function(response) 
        onsole.log(response.data);
        $window.location.href='/index.html'; 
    );
;
   );

【问题讨论】:

请查看the edit history 了解需要编辑多少才能使其可读。我们不要求人们在这里使用完美的英语,但如果你喜欢全小写的发帖和 txtspk,Stack Overflow 可能不适合你。 - - 对不起。因为我还是不习惯'use statckoverfolw'。谢谢你的提醒。我会注意的。 【参考方案1】:

我终于得到了答案。资源是我使用AngularJS登录后,没有设置标志withCredentials,所以当我需要再次访问资源时,我只需$http.get('http://localhost:8090/test__2/',withCredentials: true).then就可以了。

感谢Angularjs $http does not seem to understand "Set-Cookie" in the response。

【讨论】:

以上是关于Spring Security中登录后如何访问资源?的主要内容,如果未能解决你的问题,请参考以下文章

spring security 判断用户是否登录 只要登录就可以访问资源

不登录就无法访问静态资源目录(我使用的是spring security)

使用Spring Security登录认证,通过Oauth2.0开发第三方授授权访问资源项目详解

Spring Security---ONE

Spring Security 不允许资源,登录浏览器后只显示一个 css 文件?

使用 oauth2 在浏览器中登录后访问 REST 服务,使用 java config 访问 Spring Security