【问题标题】:spring-security with angularjs integrationspring-security 与 angularjs 集成
【发布时间】:2015-11-13 03:53:21
【问题描述】:

我有球衣休息服务,我用它来为 AngularJS 应用程序提供数据。 我想让一些休息方法像这个模板下的所有方法一样安全(myapp/data/**)。 我有 Spring @Repository 类来获取用户的用户名和密码。 我怎样才能做到这一点?

我试着这样做:

@Configuration
@Order(2147483636)
@EnableWebSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
@Autowired
private UserService userService;

@Override
protected void configure(HttpSecurity http) throws Exception {
    http.httpBasic().and().authorizeRequests()
            .antMatchers("/rest/**", "/").permitAll().anyRequest()
            .authenticated().and().csrf()
            .csrfTokenRepository(csrfTokenRepository()).and()
            .addFilterAfter(csrfHeaderFilter(), CsrfFilter.class)
            .userDetailsService(userService);
}

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;
}
}

但是没有这个类是安全的。

我想要确保安全的其他方法之一的示例:

@Path("/rest")
public class RestService {
@GET
@Path("/getEntity")
@Produces("application/json")
public Response getEntity(@QueryParam("id") int entityId) {
    Entity e = entityRepository.get(entityId);
    if (e != null) {
        Response.ok(ObjectUtils.toJson(entity), MediaType.APPLICATION_JSON).build();
    }
    return Response.serverError().entity("Entity + entityId + " not found").build();
}

【问题讨论】:

    标签: java angularjs spring rest spring-security


    【解决方案1】:

    为了将 springSecurityFilterChain 添加到您的上下文中,您还需要创建一个 SpringSecurityInitializer 类:

    public class SpringSecurityInitializer extends AbstractSecurityWebApplicationInitializer {
       //do nothing
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-11
      • 2012-01-20
      • 2011-04-16
      • 2013-09-23
      • 2014-05-22
      • 2016-12-03
      • 2012-08-12
      相关资源
      最近更新 更多