java-Spring Security-从数据库获取当前用户字段
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-Spring Security-从数据库获取当前用户字段,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2509字,纯文字阅读大概需要4分钟。
内容图文
![java-Spring Security-从数据库获取当前用户字段](/upload/InfoBanner/zyjiaocheng/882/9211e52eb0684943aa706e718c5d88ba.jpg)
我的数据库中有一个包含用户信息的表.
CREATE TABLE users
(
id_user serial NOT NULL,
phone text,
password text,
balance numeric,
email text,
CONSTRAINT users_pkey PRIMARY KEY (id_user),
CONSTRAINT users_login_key UNIQUE (phone)
)
我使用Spring Security.配置的一部分:
<security:jdbc-user-service id="userService"
data-source-ref="dataSource"
users-by-username-query="select phone, password, true from users where phone=?"
authorities-by-username-query="select phone,'ROLE_USER' from users where phone=?" />
例如,如何获取Spring MVC Controller中的当前用户余额?
解决方法:
您在Spring Security配置中定义的JDBC service将仅使用用户按用户名查询查询获取用户名,密码和启用状态,并使用按用户名查询查询获取用户名的授权.这意味着任何其他属性都不会映射到将创建以填充安全上下文的用户主体对象.
获取用户所有信息的一种方法是创建UserDetailsS??ervice的自定义实现,该实现将能够检索包括其所有自定义属性的用户数据.这是此方法的一个示例(假定您正在对数据层使用JPA / Hibernate):
实体
@Entity
@Table(name="users")
public class User implements UserDetails {
private BigDecimal balance;
// Other properties omitted ...
// Getters and setters omitted ...
// Implementation of UserDetails methods omitted ...
}
用户服务
负责加载用户信息的服务.请注意,在现实世界中,您可能应该有单独的DAO查询用户,针对接口的程序等.此示例故意保留得尽可能短.
@Service
public class UserService implements UserDetailsService {
@Autowired
private SessionFactory sessionFactory;
@Override
public User loadUserByUsername(String username) throws UsernameNotFoundException {
Query query = sessionFactory.getCurrentSession().createQuery("FROM User u WHERE u.username = :username");
query.setParameter("username", username);
User user = (User) query.uniqueResult();
if (user == null) {
throw new UsernameNotFoundException("User with username '" + username + "' does not exist.");
}
return user;
}
}
组态
创建AuthenticationProvider bean,并提供您的自定义用户服务作为其属性.
<bean id="daoAuthenticationProvider" class="org.springframework.security.authentication.dao.DaoAuthenticationProvider">
<property name="userDetailsService" ref="userService" />
<!-- Other required properties ... -->
</bean>
控制者
您可以使用以下命令在控制器中访问当前用户及其属性:
User user = (User) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
BigDecimal balance = user.getBalance();
最后一点,请注意,这并不是100%有效地复制和粘贴您的问题的解决方案,而是演示了为达到所需结果而可以采取的方法.我建议仔细阅读核心类/接口的文档,例如AuthenticationProvider,UserDetailsS??ervice,UserDetails和Spring Security指南,以获取更多详细信息.
内容总结
以上是互联网集市为您收集整理的java-Spring Security-从数据库获取当前用户字段全部内容,希望文章能够帮你解决java-Spring Security-从数据库获取当前用户字段所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。