【问题标题】:how spring security worksSpring Security 的工作原理
【发布时间】:2015-12-20 12:06:59
【问题描述】:

目的我的问题是理解并清楚地了解 Spring 中 Security /Session 的工作方式。因为我对 Spring 概念很陌生。 我按照本教程了解

https://spring.io/guides/tutorials/spring-security-and-angular-js/

我的目标是:当用户请求某些资源时(例如 /order/details)并且如果该请求的标头中没有令牌,那么它应该被重定向到带有新令牌的登录页面。

    @EnableWebSecurity
@Configuration
@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)
public class Config extends WebSecurityConfigurerAdapter {

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

        http.httpBasic().and().authorizeRequests().antMatchers("/*")
                .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);
                        response.sendRedirect("/login");
                    }
                }
                filterChain.doFilter(request, response);
            }
        };
    }

    private CsrfTokenRepository csrfTokenRepository() {
        HttpSessionCsrfTokenRepository repository = new HttpSessionCsrfTokenRepository();
        repository.setHeaderName("X-XSRF-TOKEN");
        return repository;
    }
}

上面的代码工作正常,但是关于重定向到登录页面,我无法实现它。

请帮助我理解这里的概念。如果您需要更多详细信息,请告诉我。

谢谢

【问题讨论】:

  • 你到底想做什么?告诉我。我在这方面工作了很长时间!
  • 我正在更新我的代码,请看这个
  • 无论你想要实现什么,Spring-Security 已经有机制来做到这一点。你让事情变得复杂是我可以说的。请参阅指南并进行配置。另外,请尝试正确解释问题所在。我已经失去了第三段本身发生的事情。
  • @We are Borg 请立即查看...我已更新我的帖子以使其更具解释性。

标签: spring spring-security spring-boot


【解决方案1】:

几周前我在你的位置。我必须将安全性集成到一个 Spring 项目中,而且我对 Spring 和安全性都是新手。 这就是我所做的。

  1. 浏览了很多安全框架
  2. 稍微了解一下什么是身份模块认证模块等。
  3. 我遇到了KeyCloak。我使用它的 1.4 版
  4. 在本地安装 keycloak 并设置领域
  5. 为我的 springboot 应用配置了 keycloak 适配器(您可以在 keycloak 文档中找到所有相关信息)
  6. 就是这样。我能够只使用一个 json 文件和一个 xml 配置文件来保护我的 web 应用程序和 rest api。

看看吧。 我不是安全或弹簧方面的专家。只是分享我最近所做的工作。

【讨论】:

    猜你喜欢
    • 2017-02-23
    • 2017-04-06
    • 2019-11-17
    • 2018-07-13
    • 2017-04-14
    • 2021-07-28
    • 1970-01-01
    • 2013-10-13
    • 2012-03-04
    相关资源
    最近更新 更多