gpt4 book ai didi

java - 为 secure spring petclinic 的每个用户单独的 mysql 登录

转载 作者:行者123 更新时间:2023-11-30 00:26:20 24 4
gpt4 key购买 nike

为了学习 Spring 安全性,我已经向 Spring Petclinic 示例添加了安全性。我注意到 petclinic 应用程序配置为使用相同的用户名和密码将所有用户登录到 MySQL。如何更改 petclinic 的配置,以便 petclinic 应用程序的每个用户都能够使用自己唯一的用户名和密码登录 MySQL?

这里是a link to the data-access.properties file 。注意,我的版本中MySQL部分没有注释,而HSQL部分在我的版本中被删除。当前在 data-access.properties 中引用的 jdbc.usernamejdbc.password 需要为每个用户动态设置。

这里是a link to the entire code for the petclinic app

我将 SecurityConfig.java 添加到应用程序以设置 Spring 安全性,如下所示:

@Configuration
@EnableWebMvcSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

@Autowired
private UserDetailsService userDetailsService;

@Override
protected void configure(HttpSecurity http) throws Exception {
http
.csrf().disable()
.formLogin()
.loginPage("/login")
.defaultSuccessUrl("/")
.usernameParameter("j_username")
.passwordParameter("j_password")
.loginProcessingUrl("/j_spring_security_check")
.failureUrl("/login")
.permitAll()
.and()
.logout()
.logoutUrl("/somelogout")
.logoutSuccessUrl("/login")
.and()
.authorizeRequests()
.antMatchers("/**").hasRole("MODERATOR")
.antMatchers("/j_spring_security_check").permitAll()
.and()
.userDetailsService(userDetailsService);
}
}

我还创建了一个与 MySQL 中的用户表相对应的 User 类,以及与 MySQL 中的角色表相对应的 Role 类,以及样板 Spring 中的 ServiceDAO 内容用于管理每个用户的身份验证和授权的检索。

我希望 MySQL 能够使用触发器记录有关用户 Activity 的信息,因此我需要以某种方式将用户的身份发送到数据库中,我想最干净的方法可能是让每个用户登录MySQL 的独特之处在于,它没有将用户身份嵌入到 MVC 架构的每个组件中,以实现简单的日志记录系统。我正在使用 JPA,如果这很重要的话。

如何设置?

最佳答案

这是一种方法。

另一种方法是拥有 MySQL 的应用程序级别凭据,只有应用程序知道。您不会使用触发器记录 Activity 信息;您可以通过从中间层在应用程序中的适当位置插入记录来完成此操作。您需要为每个新用户创建一个 session ID,并将事件与其关联。

一个用户可以有多个 session ,因此如果了解该用户很重要,您就必须找到一种方法将用户凭据与 session 关联起来。

但它会简化数据库并将所有事件保留在中间层。使用 Java 可能更容易控制这种方式。如果您可以将事件插入数据库异步,您的响应也会更好。

关于java - 为 secure spring petclinic 的每个用户单独的 mysql 登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22845543/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com