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

如何在Spring Security SecurityConfig中获取用户给定的用户名和密码?

金皓君
2023-03-14

对于一些要求,我需要从登录页面的用户给定的用户名和密码。(

但是,我无法设法进入以下SecurityConfig的配置方法。

@EnableWebSecurity公共类SecurityConfig扩展WebSecurity配置适配器{

@Autowired
PasswordEncoder passwordEncoder;

@Autowired
DataSource dataSource;

@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {

    **// Wants to get user-given username and password**


         auth.jdbcAuthentication().dataSource(dataSource)
         .passwordEncoder(passwordEncoder())
         .usersByUsernameQuery("select username,password, true from user where username=?")
        .authoritiesByUsernameQuery("select u.username, r.rolename from user u, role r where u.roleId = r.id and u.username=?");


     }

}

共有1个答案

夹谷飞龙
2023-03-14

这里不应该这样做。如果你想获得用户凭据,你应该在你的过滤器中实现它。例如,你可以定义一个新的。

@Component
@Order(Ordered.HIGHEST_PRECEDENCE)
class AuthFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    }


    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,
            ServletException {
        if (request.getContentType() != null && request.getContentType().contains("application/json") && Objects.equals(((RequestFacade) request).getServletPath(), "/oauth/token")) {
            InputStream is = request.getInputStream();
            ByteArrayOutputStream buffer = new ByteArrayOutputStream();

            int nRead;
            byte[] data = new byte[16384];

            while ((nRead = is.read(data, 0, data.length)) != -1) {
                buffer.write(data, 0, nRead);
            }
            buffer.flush();
            byte[] json = buffer.toByteArray();

            HashMap<String, String> result = new ObjectMapper().readValue(json, HashMap.class);
            HashMap<String, String[]> r = new HashMap<>();
            for (String key : result.keySet()) {
                String[] val = new String[1];
                val[0] = result.get(key);
                r.put(key, val);
            }

            String[] val = new String[1];
            val[0] = ((RequestFacade) request).getMethod();
            r.put("_method", val);

            HttpServletRequest s = new MyServletRequestWrapper(((HttpServletRequest) request), r);
            chain.doFilter(s, response);
        } else {
            chain.doFilter(request, response);
        }
    }

    @Override
    public void destroy() {
    }
}

例如,这段代码获取查询参数并将其放入请求体中。

 类似资料:
  • 问题内容: 我丢失了MySQL用户名和密码。我如何找回它? 问题答案: 停止MySQL进程。 使用–skip-grant-tables选项启动MySQL进程。 使用-u root选项启动MySQL控制台客户端。 列出所有用户; 重设密码; 但 不要忘记 ,以 停止MySQL进程 正常启动MySQL进程(即不使用–skip-grant-tables选项) 完成后。否则,数据库的安全性可能会受到威胁。

  • 问题内容: 我得到一个20个字符的数字ID,看起来像 10527391670258314752 ,给定这个ID,我如何获得与之关联的用户名? 该表如下所示: 然后将从数据库中检索出的用户名存储到中。 我已经试过了: 输出将代替名称。 问题答案: 我强烈建议避免mysqli扩展。您应该使用一些数据库抽象库,而不是直接使用mysqli函数。mysqli类不适合单独使用。 如果您真的想使用纯mysqli

  • 我有一份詹金斯的工作,在那里我登录了一个网站。网站的用户名和密码与我为詹金斯使用的用户名和密码相同。我想得到詹金斯的用户名和密码,并把它传递给我写的java代码登录到网站。 如何获取Jenkins用户名和密码属性? 背景:假设我使用“用户名1”和“密码1”登录到Jenkins。我有一个使用相同登录凭据的网站。我有一个詹金斯的工作创建登录到这个网站。詹金斯的工作被很多人使用。我想以这样的方式编写Ja

  • 问题内容: 我需要输入USER表的USER_ID字段作为另一个表中的外键。因此,我认为我需要在用户登录时启动一个会话。我很难让它在任何地方回显。我能够启动一个会话,该会话允许我回显USERNAME,但无法将其复制为ID。 请帮忙吗?我的处理代码如下。我还粘贴了本节,我暂时尝试对其进行回显以进行测试。 处理脚本: 我希望USER_ID出现在哪里: 问题答案: 使用FETCH_ASSOC而不是FETC

  • 我将jenkins安装到windows 10。当我访问http://localhost:8080/,我必须输入用户名和密码。 但我不会像截图显示的那样显示秘密文件夹: 在包含jenkins.war的路径文件夹中运行时,我得到了这个异常 你能帮我解决那个问题吗?。 如有任何建议,将不胜感激。提前谢谢。

  • 我找不到如何将用户名和密码传递给KafkaConsumer。我使用SASL明文对Kafka服务器上的客户端进行身份验证。 我试图在上找到此信息https://kafka.apache.org/documentation/#consumerconfigs但结果是否定的。 我发现了一些作者使用参数“用户名”和“密码”的例子。我试图这样做: 但我得到了例外"未能构建Kafka消费者"。 如果有人知道如何