当前位置: 首页 > 知识库问答 >
问题:

为jdbc身份验证提供用户和密码的正确方法是什么?

景建业
2023-03-14

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

对于查找,我希望使用spring Security附带的jdbc身份验证。为jdbc身份验证提供数据的正确方式是什么?我必须在请求头中写入用户名和密码吗?还是可以使用http基本身份验证?

编辑:我现在的方法如下。我已经配置了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个答案

隗锐进
2023-03-14

从文档来看,您可以将其作为表单主体提供,也可以作为基本身份验证提供,无论您喜欢哪种:

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

 类似资料:
  • 问题内容: 我的项目使用Node.js和Express,但问题在于通用方法。 我们的用户全部来自FB,除FB外,我们没有其他任何身份验证。我们需要将某些操作与特定的FB用户相关联,还需要他们的令牌才能与FB通信。 目前, 我们这样做: 用户来到页面 有一些 看不见的 块:一个带有占位符,用于存储用户的化身和姓名(“已登录”),另一个带有用于触发FB登录的按钮(“已退出”) 使用FB JS SDK,

  • 我有几个ActiveMQ 5.10的安装,我想保护它们。第一步是对照数据库中的表验证客户机id、用户名和密码。这个列表将(希望)经常改变,所以它必须保持动态。 我找到了几个开发扩展BrokerFilter的示例,它似乎工作正常——我可以通过记录我添加的内容来判断。问题是ActiveMQ中还有其他部分需要用户名和密码并尝试进行身份验证。我相信由于没有启用其他身份验证,它会失败,并显示以下消息:用户名

  • 在我的Jitsi Meet Prodody配置文件中:~/。jitsi meet cfg/prosody/config/conf.d 我有以下配置: 有了它,我可以通过令牌进行身份验证。 但是,如果我不指定任何令牌,例如: https://jitsi.mydummyserver.com/test 然后我得到以下提示询问用户和密码: 有没有办法只允许令牌身份验证并完全摆脱那个提示? 谢谢

  • 问题内容: 在不使用CMS或繁重框架的情况下,对用户进行身份验证的最佳最新库/方法是什么? 响应中应包含关于您认为应被视为涉及用户身份验证的新PHP开发标准的建议。 问题答案: OpenID是一种基于用户在常见网络服务(例如Yahoo,Google和Flickr)上现有帐户进行身份验证的方法。 登录到您的站点是基于成功登录到远程站点。 您不需要存储敏感的用户信息或使用SSL来保护用户登录。 可以在

  • 本文向大家介绍iOS判断身份证号码是否正确的方法,包括了iOS判断身份证号码是否正确的方法的使用技巧和注意事项,需要的朋友参考一下 ①根据百度百科中身份证号码的标准实现该方法 ②该方法只能判断18位身份证,且不能判断身份证号码和姓名是否对应(要看姓名和号码是否对应,应该有大量的数据库做对比才能实现) ③直接copy这段代码,就能通过调用这个方法判断身份证号码是否符合标准,非常easy 以上就是本文

  • 我正在尝试使用Mailkit从我的Gmail中接收电子邮件: 行:客户端。身份验证(oauth 2);引发异常- MailKit.Security.AuthenticationException 我按照这个答案设置了我的Gmail API,但是后来我遇到了认证失败的问题。 这是日志: 范围,我使用:GmailService.Scope.Gmail只读,因为我只需要检索电子邮件。 将我的范围更新为: