我使用 Java spring 框架来确保安全。我预先存在的表布局与 spring 的预期不同,但我可以在 jdbc-user-service 上指定自定义的按用户名权限查询。问题在于该查询只需要 SQL 语句中的单个参数 (?)。基本上,如果用户存在于用户表中,他们应该获得“ROLE_USER”。如果它们在 auth 表中作为“S”存在,则它们应该获得“ROLE_USER”、“ROLE_LICENSEE”和“ROLE_SYSADMIN”。如果它们在身份验证表中以“L”形式存在,则它们应该同时获得“ROLE_LICENSEE”和“ROLE_USER”。
SELECT U.email AS 'username', 'ROLE_USER' AS 'authority' FROM users U WHERE U.email=**?**
UNION
SELECT U.email AS 'username', 'ROLE_LICENSEE' AS 'authority'
FROM users U, auth_sys A
WHERE U.user_id=A.user_id AND A.auth_type IN ('L', 'S') AND U.email=**?**
UNION
SELECT U.email AS 'username', 'ROLE_ADMIN' AS 'authority'
FROM users U, auth_sys A
WHERE U.user_id=A.user_id AND A.auth_type='S' AND U.email=**?**;
我的问题是如何将其从 3 (?) 减少到 1?
最佳答案
由于您已经在使用 Spring 框架,因此您也可以使用 Spring 框架进行 JDBC 调用。 Spring框架有一个NamedParameterJdbcTemplate它允许您命名 JDBC 参数。因此,您可以创建一个名为 :emailAddress 的命名参数,并在 SQL 中使用同一参数三次,但仅将其传递到模板中一次。
关于java - 从使用 3 个相同的 SQL 参数转换为 1 个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3112941/