Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java secure spring petclinic的每个用户都有单独的mysql登录_Java_Mysql_Spring_Spring Mvc_Jpa - Fatal编程技术网

Java secure spring petclinic的每个用户都有单独的mysql登录

Java secure spring petclinic的每个用户都有单独的mysql登录,java,mysql,spring,spring-mvc,jpa,Java,Mysql,Spring,Spring Mvc,Jpa,为了学习spring安全性,我在spring petclinic示例中添加了安全性。我注意到petclinic应用程序配置为使用相同的用户名和密码将所有用户登录到MySQL。如何更改petclinic的配置,使petclinic应用程序的每个用户都能够使用自己唯一的用户名和密码登录MySQL 这是。请注意,MySQL部分在我的版本中没有注释,而HSQL部分在我的版本中被删除。需要为每个用户动态设置数据访问.properties中当前引用的jdbc.username和jdbc.password 这

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

这是。请注意,MySQL部分在我的版本中没有注释,而HSQL部分在我的版本中被删除。需要为每个用户动态设置
数据访问.properties
中当前引用的
jdbc.username
jdbc.password

这是

我在应用程序中添加了
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中的样板
Service
DAO
stuff,以管理每个用户的身份验证和授权检索

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


我如何设置它?

这是一种方法

另一个是MySQL的应用程序级凭证,只有应用程序知道。您不会使用触发器记录活动信息;您可以从中间层在应用程序中的适当位置插入记录。您将为每个新用户创建一个会话ID,并将事件与之关联

一个用户可以有多个会话,因此如果知道单个会话很重要,则必须找到将用户凭据与会话关联的方法


但它将简化数据库并将所有事件保持在中间层。使用Java进行控制可能更容易。如果您可以将事件插入到数据库中,那么您的响应也会更好。

您没有。您不应授予单个用户对数据库的直接访问权限。在mysql中创建一个帐户供代码使用,然后在自己的代码中执行应用程序级安全性。除非您在数据库中创建了大量视图,并且只授予这些用户访问这些视图的权限,而这些视图会进行安全筛选,否则您将无法阻止人们随意翻找。不,对不起。宠物诊所?这是90年代后期的一个J2EE演示问题。这仍然与此相关吗?我可以从
request.getSession().getId()
中获取会话ID,但我认为您的建议需要我在复杂的体系结构中编写大量代码。你能指出一个我可以学习的好例子,这样我就不会造成不必要的复杂性吗?