我正在尝试开发可与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());
}
答案 0 :(得分:0)
从文档中,您可以将其作为表单正文或基本身份验证提供,无论您喜欢哪个: