为jdbc auth提供用户和密码的正确方法是什么?

时间:2016-10-18 21:35:33

标签: java spring rest spring-security http-basic-authentication

我正在尝试开发可与REST API一起使用的服务器后端。我想提供一个端点,用户可以通过请求发送用户名和密码。在数据库中查找用户数据,如果用户有效,则创建JWT令牌并通过响应发送给客户端。

对于查找,我想使用Spring安全性附带的jdbc身份验证。为jdbc身份验证提供数据的正确方法是什么?我是否必须在请求标头中写入用户名和密码?或者http basic basic可以用于此吗?

编辑: 我目前的做法如下。我配置了jdbc身份验证和http基本身份验证。我尝试用集成测试来测试它。测试回复401状态,而我预计200状态。我已经测试了sql查询独奏。他们工作。

任何人都可以给我一些我做错的提示吗?

安全配置:(这是一个内部类)

@Configuration
@Import(DaoConfig.class)
@Order(2)
public static class HttpBasicAuthConfig extends WebSecurityConfigurerAdapter {
    @Autowired
    private DataSource dataSource;
    @Autowired
    public void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth
        .jdbcAuthentication()
        .dataSource(dataSource)
        .usersByUsernameQuery("select username, password, 1 from account where username=?")
        .authoritiesByUsernameQuery("select username, 'user' from account where username=?")
        .rolePrefix("");
    }
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.antMatcher("/auth/login")
        .authorizeRequests()
        .anyRequest().hasAuthority("user")
        .and().httpBasic()
        .and().csrf().disable();
    }
}

测试代码:

@Autowired
private FilterChainProxy springSecurityFilterChain;

private MockMvc securityMockMvc;

@Before
public void SetupContext() {
    securityMockMvc = MockMvcBuilders
    .webAppContextSetup(wac)
    .addFilters(springSecurityFilterChain)
    .apply(springSecurity()).build();
}

@Test
public void testLoginHttpBasic() throws Exception {
    MockHttpServletRequestBuilder post = post("/auth/login").with(httpBasic("frank","password"));
    securityMockMvc.perform(post).andExpect(status().isOk());
}

1 个答案:

答案 0 :(得分:0)

从文档中,您可以将其作为表单正文或基本身份验证提供,无论您喜欢哪个:

http://docs.spring.io/spring-security/site/docs/3.1.x/reference/springsecurity-single.html#ns-form-and-basic