From 10eac2477bb37cac61b977892fad17dae1821d00 Mon Sep 17 00:00:00 2001 From: fzhulitov Date: Wed, 9 Jun 2021 20:02:49 +0300 Subject: [PATCH 1/7] Postgres connected database spring on local host user = springuser password = 12345 Registration work, write to base (login, pass) if not already registred Now Login via autogenerated passwd via /login With base auth work register via Postman post If you login in browser and go to /username - it print username from Priincipal, but it don't work from postman with base auth I think properties.setProperty("hibernate.hbm2ddl.auto", "update"); didn't work, can't add colum, if you change to "create", it make new table easy Some debug option added/ --- pom.xml | 11 ++++ .../java/ru/hedin/modelka/Application.java | 4 ++ .../modelka/config/PersistenceJPAConfig.java | 12 ++--- .../modelka/config/WebSecurityConfig.java | 36 +++++++------ .../modelka/controller/LoginController.java | 50 +++++++++++++++++++ .../controller/RegistrationController.java | 45 +++++++++++++++-- .../controller/SecurityController.java | 22 ++++++++ .../java/ru/hedin/modelka/domain/ModUser.java | 45 +++++++++++++++++ .../modelka/domain/RegistrationService.java | 30 +++++++++++ .../UserDetailsRequestModel.java} | 25 +++------- .../hedin/modelka/service/TestRepository.java | 10 ++-- .../hedin/modelka/service/UserRepository.java | 40 +++++++++++++++ src/main/resources/persistence.xml | 4 +- 13 files changed, 282 insertions(+), 52 deletions(-) create mode 100644 src/main/java/ru/hedin/modelka/controller/LoginController.java create mode 100644 src/main/java/ru/hedin/modelka/controller/SecurityController.java create mode 100644 src/main/java/ru/hedin/modelka/domain/ModUser.java create mode 100644 src/main/java/ru/hedin/modelka/domain/RegistrationService.java rename src/main/java/ru/hedin/modelka/{domain/User.java => model/UserDetailsRequestModel.java} (53%) create mode 100644 src/main/java/ru/hedin/modelka/service/UserRepository.java diff --git a/pom.xml b/pom.xml index e8075b7..fe04dc8 100644 --- a/pom.xml +++ b/pom.xml @@ -78,6 +78,17 @@ hibernate-entitymanager 5.4.27.Final + + + org.postgresql + postgresql + 42.2.20 + + + org.springframework.boot + spring-boot-starter-actuator + + org.springframework.boot diff --git a/src/main/java/ru/hedin/modelka/Application.java b/src/main/java/ru/hedin/modelka/Application.java index 3a3a183..ca174d8 100644 --- a/src/main/java/ru/hedin/modelka/Application.java +++ b/src/main/java/ru/hedin/modelka/Application.java @@ -2,8 +2,12 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.data.jpa.repository.config.EnableJpaRepositories; +import org.springframework.data.repository.config.BootstrapMode; @SpringBootApplication +@EnableJpaRepositories (bootstrapMode = BootstrapMode.LAZY) + public class Application { public static void main(String[] args){ diff --git a/src/main/java/ru/hedin/modelka/config/PersistenceJPAConfig.java b/src/main/java/ru/hedin/modelka/config/PersistenceJPAConfig.java index 0c1583c..19f9523 100644 --- a/src/main/java/ru/hedin/modelka/config/PersistenceJPAConfig.java +++ b/src/main/java/ru/hedin/modelka/config/PersistenceJPAConfig.java @@ -35,10 +35,10 @@ public LocalContainerEntityManagerFactoryBean entityManagerFactory() { @Bean public DataSource dataSource() { DriverManagerDataSource dataSource = new DriverManagerDataSource(); - dataSource.setDriverClassName("org.h2.Driver"); - dataSource.setUrl("jdbc:h2:mem:db;DB_CLOSE_DELAY=-1"); - dataSource.setUsername("sa"); - dataSource.setPassword(""); + dataSource.setDriverClassName("org.postgresql.ds.PGSimpleDataSource"); + dataSource.setUrl("jdbc:postgresql://localhost:5432/spring"); + dataSource.setUsername("springuser"); + dataSource.setPassword("12345"); return dataSource; } @@ -72,9 +72,9 @@ public PersistenceExceptionTranslationPostProcessor exceptionTranslation(){ Properties additionalProperties() { Properties properties = new Properties(); - properties.setProperty("hibernate.hbm2ddl.auto", "create-drop"); + properties.setProperty("hibernate.hbm2ddl.auto", "update"); // properties.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQL5Dialect"); - properties.setProperty("hibernate.dialect", "org.hibernate.dialect.H2Dialect"); + properties.setProperty("hibernate.dialect", "org.hibernate.dialect.PostgresPlusDialect"); return properties; } diff --git a/src/main/java/ru/hedin/modelka/config/WebSecurityConfig.java b/src/main/java/ru/hedin/modelka/config/WebSecurityConfig.java index f9e70b1..8bb41ec 100644 --- a/src/main/java/ru/hedin/modelka/config/WebSecurityConfig.java +++ b/src/main/java/ru/hedin/modelka/config/WebSecurityConfig.java @@ -1,24 +1,29 @@ package ru.hedin.modelka.config; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; -import org.springframework.security.core.userdetails.User; -import org.springframework.security.core.userdetails.UserDetails; -import org.springframework.security.core.userdetails.UserDetailsService; -import org.springframework.security.provisioning.InMemoryUserDetailsManager; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; +import org.springframework.security.crypto.password.PasswordEncoder; @Configuration -@EnableWebSecurity +@EnableWebSecurity (debug = true) public class WebSecurityConfig extends WebSecurityConfigurerAdapter { + @Override protected void configure(HttpSecurity http) throws Exception { http + .csrf().disable() .authorizeRequests() .antMatchers("/").permitAll() -// .anyRequest().authenticated() + .antMatchers("/register").permitAll() + .antMatchers("/log").permitAll() + .antMatchers("/username").permitAll() + .anyRequest().authenticated() .and() .formLogin() .loginPage("/login") @@ -28,16 +33,15 @@ protected void configure(HttpSecurity http) throws Exception { .permitAll(); } + + // @Bean + + +/* @Bean - @Override - public UserDetailsService userDetailsService() { - UserDetails user = - User.withDefaultPasswordEncoder() - .username("user") - .password("password") - .roles("USER") - .build(); - - return new InMemoryUserDetailsManager(user); + public PasswordEncoder passwordEncoder(){ + return new BCryptPasswordEncoder(12); } +*/ + } \ No newline at end of file diff --git a/src/main/java/ru/hedin/modelka/controller/LoginController.java b/src/main/java/ru/hedin/modelka/controller/LoginController.java new file mode 100644 index 0000000..4a54078 --- /dev/null +++ b/src/main/java/ru/hedin/modelka/controller/LoginController.java @@ -0,0 +1,50 @@ +package ru.hedin.modelka.controller; + + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.MediaType; +import org.springframework.security.core.authority.SimpleGrantedAuthority; +import org.springframework.security.provisioning.InMemoryUserDetailsManager; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import ru.hedin.modelka.domain.ModUser; +import ru.hedin.modelka.model.UserDetailsRequestModel; +import ru.hedin.modelka.service.UserRepository; + +import java.util.Collections; + +@RestController("/log") +@RequestMapping("/log") +public class LoginController { +public InMemoryUserDetailsManager inMemoryUserDetailsManager; + @Autowired + UserRepository userRepository; + + @PostMapping( name = "", + consumes = {MediaType.APPLICATION_JSON_VALUE} + ) + public String loginFromBase (@RequestBody UserDetailsRequestModel requestModel){ + + ModUser modUser; + String str = requestModel.getLogin(); + modUser = userRepository.findUserByName(str); + String passwd = requestModel.getPassword(); + + if (modUser == null) {return "no such user";} + + if (passwd.equals(modUser.getPassword())) { + + org.springframework.security.core.userdetails.User userd = + new org.springframework.security.core.userdetails.User(str, passwd, Collections.singletonList(new SimpleGrantedAuthority("USER"))); + + inMemoryUserDetailsManager = new InMemoryUserDetailsManager(userd); + return "all write"; + } + + return "wrong password"; + + } + +} diff --git a/src/main/java/ru/hedin/modelka/controller/RegistrationController.java b/src/main/java/ru/hedin/modelka/controller/RegistrationController.java index 65c60c2..d7359ac 100644 --- a/src/main/java/ru/hedin/modelka/controller/RegistrationController.java +++ b/src/main/java/ru/hedin/modelka/controller/RegistrationController.java @@ -1,19 +1,54 @@ package ru.hedin.modelka.controller; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.*; +import ru.hedin.modelka.domain.ModUser; +import ru.hedin.modelka.domain.RegistrationService; +import ru.hedin.modelka.model.UserDetailsRequestModel; import ru.hedin.modelka.service.TestRepository; +import ru.hedin.modelka.service.UserRepository; @RestController("/register") @RequestMapping("/register") public class RegistrationController { + @Autowired private TestRepository testRepository; + @Autowired + private UserRepository userRepository; + @Autowired + RegistrationService rs ; + @GetMapping(name = "") - public String test(){ + public String test() { int size = testRepository.test(); - return "test_"+size; + return "test_" + size; } + + @PostMapping(name = "", + consumes = {MediaType.APPLICATION_JSON_VALUE} + ) + public String registration(@RequestBody UserDetailsRequestModel requestModel) { + + ModUser modUser; + + modUser = userRepository.findUserByName(requestModel.getLogin()); + + if (modUser != null) { + return "Already Exist"; + } + modUser = new ModUser(); + modUser.setUserName(requestModel.getLogin()); + modUser.setPassword(requestModel.getPassword()); + +// call Service + if (rs.creteUser( modUser)){ + return "All Ok"; + } + + return "something wrong"; + } + + } diff --git a/src/main/java/ru/hedin/modelka/controller/SecurityController.java b/src/main/java/ru/hedin/modelka/controller/SecurityController.java new file mode 100644 index 0000000..a6b419d --- /dev/null +++ b/src/main/java/ru/hedin/modelka/controller/SecurityController.java @@ -0,0 +1,22 @@ +package ru.hedin.modelka.controller; + +import org.springframework.boot.actuate.trace.http.HttpTrace; +import org.springframework.security.core.Authentication; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.security.Principal; + +@Controller + public class SecurityController { + + @RequestMapping(value = "/username", method = RequestMethod.GET) + @ResponseBody + public String currentUserName(Principal authentication) { + return " principal name "+authentication.getName() + " it was left from this"; + } + } + + diff --git a/src/main/java/ru/hedin/modelka/domain/ModUser.java b/src/main/java/ru/hedin/modelka/domain/ModUser.java new file mode 100644 index 0000000..9bd2eea --- /dev/null +++ b/src/main/java/ru/hedin/modelka/domain/ModUser.java @@ -0,0 +1,45 @@ +package ru.hedin.modelka.domain; + +import javax.persistence.*; + +@Entity +@Table(name = "mod_user") +public class ModUser { + @Id + // @GeneratedValue(strategy = GenerationType.IDENTITY) + @SequenceGenerator(name="modelPKgen", sequenceName="MODEL_C_MODEL_seq") + @GeneratedValue(generator="modelPKgen", strategy= GenerationType.IDENTITY) + private long id; + @Column (nullable = false, unique = true ) + private String userName; + private String password; + private long longRoles = 1; //ROLE_USER +// @Bean +// public ModUser() { +// } + + + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + + public String getUserName() { + return userName; + } + + public void setUserName(String login) { + this.userName = login; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } +} diff --git a/src/main/java/ru/hedin/modelka/domain/RegistrationService.java b/src/main/java/ru/hedin/modelka/domain/RegistrationService.java new file mode 100644 index 0000000..c8dc5eb --- /dev/null +++ b/src/main/java/ru/hedin/modelka/domain/RegistrationService.java @@ -0,0 +1,30 @@ +package ru.hedin.modelka.domain; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; +import org.springframework.stereotype.Service; +import ru.hedin.modelka.service.UserRepository; + +@Service +public class RegistrationService { + @Autowired + private UserRepository userRepository; + // private BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder(12); + public boolean creteUser (ModUser modUser){ + + // User to save to database via repository @link + // ModUser user2Save = new ModUser(); +// user2Save.setUserName(modUser.getUserName()); + //need encoder done +// BCryptPasswordEncoder enc = new BCryptPasswordEncoder(12); +// String encpass = enc.encode(modUser.getPassword()); + // user2Save.setPassword(modUser.getPassword()); + //need to set Roles and maybe something else + + + if (userRepository.saveUser(modUser)) { + return true; + } + return false; + } +} diff --git a/src/main/java/ru/hedin/modelka/domain/User.java b/src/main/java/ru/hedin/modelka/model/UserDetailsRequestModel.java similarity index 53% rename from src/main/java/ru/hedin/modelka/domain/User.java rename to src/main/java/ru/hedin/modelka/model/UserDetailsRequestModel.java index 3e2719e..faaa5aa 100644 --- a/src/main/java/ru/hedin/modelka/domain/User.java +++ b/src/main/java/ru/hedin/modelka/model/UserDetailsRequestModel.java @@ -1,25 +1,9 @@ -package ru.hedin.modelka.domain; - -import javax.persistence.*; - -@Entity -@Table(name = "m_user") -public class User { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private long id; +package ru.hedin.modelka.model; +public class UserDetailsRequestModel { private String login; private String password; - public long getId() { - return id; - } - - public void setId(long id) { - this.id = id; - } - public String getLogin() { return login; } @@ -35,4 +19,9 @@ public String getPassword() { public void setPassword(String password) { this.password = password; } + + @Override + public String toString() { + return "super.toString()"+login+" "+password; + } } diff --git a/src/main/java/ru/hedin/modelka/service/TestRepository.java b/src/main/java/ru/hedin/modelka/service/TestRepository.java index 2d5b53c..63e5839 100644 --- a/src/main/java/ru/hedin/modelka/service/TestRepository.java +++ b/src/main/java/ru/hedin/modelka/service/TestRepository.java @@ -1,7 +1,7 @@ package ru.hedin.modelka.service; import org.springframework.stereotype.Repository; -import ru.hedin.modelka.domain.User; +import ru.hedin.modelka.domain.ModUser; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; @@ -15,11 +15,11 @@ public class TestRepository { @Transactional public int test(){ - User user = new User(); - user.setLogin("test_"+ System.currentTimeMillis()); - entityManager.persist(user); + ModUser modUser = new ModUser(); + modUser.setUserName("test_"+ System.currentTimeMillis()); + entityManager.persist(modUser); - List users = entityManager.createQuery("select u from User u").getResultList(); + List users = entityManager.createQuery("select u from ModUser u").getResultList(); return users.size(); } } diff --git a/src/main/java/ru/hedin/modelka/service/UserRepository.java b/src/main/java/ru/hedin/modelka/service/UserRepository.java new file mode 100644 index 0000000..e857975 --- /dev/null +++ b/src/main/java/ru/hedin/modelka/service/UserRepository.java @@ -0,0 +1,40 @@ +package ru.hedin.modelka.service; + +import org.springframework.stereotype.Repository; +import ru.hedin.modelka.domain.ModUser; + +import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; +import javax.transaction.Transactional; +import java.util.List; + +@Repository +public class UserRepository { + + @PersistenceContext + private EntityManager entityManager; + + @Transactional + public boolean saveUser (ModUser modUser){ + entityManager.persist(modUser); + return true; + } + public boolean contains (ModUser modUser) { + // List usersBase = entityManager.createQuery("select u from User u", User).getResultList(); + // return usersBase.contains(user); + return true; + } + // public List getUserList (){ + // return entityManager.createQuery("select u from User u",User).getResultList(); + // } + @Transactional + public ModUser findUserByName (String username){ + + List modUserList = entityManager.createQuery("select u from ModUser u",ModUser.class).getResultList(); + for (ModUser us: modUserList) { + if (username.equalsIgnoreCase (us.getUserName())) { + return us;} + } + return null; + } +} diff --git a/src/main/resources/persistence.xml b/src/main/resources/persistence.xml index e1d80aa..d5dbdb5 100644 --- a/src/main/resources/persistence.xml +++ b/src/main/resources/persistence.xml @@ -5,8 +5,8 @@ - - + + From 44a08630ffe167dc272ef75ce0f0bcdd44eaad01 Mon Sep 17 00:00:00 2001 From: fzhulitov Date: Fri, 11 Jun 2021 00:23:25 +0300 Subject: [PATCH 2/7] Postgres connected database spring on local host user = springuser password = 12345 Registration work, write to base (login, pass) if not already registred md5 work on registration and login Base Hold md5 password Troubles - see no reaction on roles --- pom.xml | 5 ++ .../modelka/config/WebSecurityConfig.java | 11 ++-- .../modelka/controller/LoginController.java | 2 +- .../controller/RegistrationController.java | 8 ++- .../controller/SecurityController.java | 29 +++++++++-- .../controller/TestRoleController.java | 38 ++++++++++++++ .../java/ru/hedin/modelka/domain/ModUser.java | 50 ++++++++++++++++++- .../hedin/modelka/security/AuthProvider.java | 36 ++++++++----- .../modelka/security/AuthenticationImpl.java | 7 +-- .../modelka/security/SecurityUserDetails.java | 7 +-- .../ru/hedin/modelka/security/UserRole.java | 6 ++- .../hedin/modelka/service/UserRepository.java | 3 +- 12 files changed, 171 insertions(+), 31 deletions(-) create mode 100644 src/main/java/ru/hedin/modelka/controller/TestRoleController.java diff --git a/pom.xml b/pom.xml index fe04dc8..3501659 100644 --- a/pom.xml +++ b/pom.xml @@ -94,5 +94,10 @@ org.springframework.boot spring-boot-starter-data-jpa + + commons-codec + commons-codec + 1.13 + \ No newline at end of file diff --git a/src/main/java/ru/hedin/modelka/config/WebSecurityConfig.java b/src/main/java/ru/hedin/modelka/config/WebSecurityConfig.java index c06e1e9..cba0eea 100644 --- a/src/main/java/ru/hedin/modelka/config/WebSecurityConfig.java +++ b/src/main/java/ru/hedin/modelka/config/WebSecurityConfig.java @@ -5,6 +5,7 @@ import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.ImportResource; import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; +import org.springframework.security.config.annotation.authentication.configuration.EnableGlobalAuthentication; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; @@ -13,6 +14,7 @@ @Configuration @EnableWebSecurity (debug = true) +@EnableGlobalAuthentication //@EnableWebSecurity @ImportResource("classpath:security.xml") public class WebSecurityConfig extends WebSecurityConfigurerAdapter { @@ -25,8 +27,11 @@ protected void configure(HttpSecurity http) throws Exception { .antMatchers("/").permitAll() .antMatchers("/register").permitAll() .antMatchers("/log").permitAll() - .antMatchers("/username").permitAll() - .anyRequest().authenticated() + .anyRequest().fullyAuthenticated() + .antMatchers("/username").authenticated() + .antMatchers("/test/admin").hasRole("ROLE_ADMIN") + .antMatchers("/test/gm").hasRole("ROLE_GM") + .antMatchers("/test/user").hasRole("ROLE_USER") .and() .formLogin() .loginPage("/login") @@ -37,7 +42,7 @@ protected void configure(HttpSecurity http) throws Exception { } - // @Bean +// @Bean /* diff --git a/src/main/java/ru/hedin/modelka/controller/LoginController.java b/src/main/java/ru/hedin/modelka/controller/LoginController.java index 4a54078..bb6520a 100644 --- a/src/main/java/ru/hedin/modelka/controller/LoginController.java +++ b/src/main/java/ru/hedin/modelka/controller/LoginController.java @@ -29,7 +29,7 @@ public String loginFromBase (@RequestBody UserDetailsRequestModel requestModel){ ModUser modUser; String str = requestModel.getLogin(); - modUser = userRepository.findUserByName(str); + modUser = userRepository.getUserByLogin(str); String passwd = requestModel.getPassword(); if (modUser == null) {return "no such user";} diff --git a/src/main/java/ru/hedin/modelka/controller/RegistrationController.java b/src/main/java/ru/hedin/modelka/controller/RegistrationController.java index d7359ac..160b590 100644 --- a/src/main/java/ru/hedin/modelka/controller/RegistrationController.java +++ b/src/main/java/ru/hedin/modelka/controller/RegistrationController.java @@ -1,5 +1,6 @@ package ru.hedin.modelka.controller; +import org.apache.commons.codec.digest.DigestUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.*; @@ -33,14 +34,17 @@ public String registration(@RequestBody UserDetailsRequestModel requestModel) { ModUser modUser; - modUser = userRepository.findUserByName(requestModel.getLogin()); + modUser = userRepository.getUserByLogin(requestModel.getLogin()); if (modUser != null) { return "Already Exist"; } modUser = new ModUser(); modUser.setUserName(requestModel.getLogin()); - modUser.setPassword(requestModel.getPassword()); + String md5Hex = DigestUtils + .md5Hex(requestModel.getPassword()).toLowerCase(); + + modUser.setPassword(md5Hex); // call Service if (rs.creteUser( modUser)){ diff --git a/src/main/java/ru/hedin/modelka/controller/SecurityController.java b/src/main/java/ru/hedin/modelka/controller/SecurityController.java index a6b419d..a3d1fa7 100644 --- a/src/main/java/ru/hedin/modelka/controller/SecurityController.java +++ b/src/main/java/ru/hedin/modelka/controller/SecurityController.java @@ -1,21 +1,44 @@ package ru.hedin.modelka.controller; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.actuate.trace.http.HttpTrace; import org.springframework.security.core.Authentication; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; +import ru.hedin.modelka.domain.ModUser; +import ru.hedin.modelka.security.UserRole; +import ru.hedin.modelka.service.UserRepository; import java.security.Principal; +import java.util.Set; -@Controller +@RestController public class SecurityController { + @Autowired + UserRepository rep; + @RequestMapping(value = "/username", method = RequestMethod.GET) @ResponseBody - public String currentUserName(Principal authentication) { - return " principal name "+authentication.getName() + " it was left from this"; + public String currentUserName (Principal authentication) { + // String to collect info + String str; + // Principal info + // странным образом стал выдавать нул поинтер на аут.гетнаме + str = " principal name "+authentication.getName()+" class "+authentication.getClass()+"/n"; + // ROles + for (UserRole role: UserRole.values() ) { + str+= "ROle name "+role.name()+" ROle ordinal "+role.ordinal()+"/n "; + } +// ROles from user + ModUser user = rep.getUserByLogin(authentication.getName()); + Set ur = user.getRoles(); + str+=ur.toString(); + + return str; } } diff --git a/src/main/java/ru/hedin/modelka/controller/TestRoleController.java b/src/main/java/ru/hedin/modelka/controller/TestRoleController.java new file mode 100644 index 0000000..cdeaa87 --- /dev/null +++ b/src/main/java/ru/hedin/modelka/controller/TestRoleController.java @@ -0,0 +1,38 @@ +package ru.hedin.modelka.controller; + +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.security.core.context.SecurityContext; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController("/test") +@RequestMapping("/test") +public class TestRoleController { + + +@PreAuthorize("hasAnyRole('ROLE_ADMIN')") +@GetMapping ("/admin") + public String isAdmin(){ + SecurityContext securityContext = SecurityContextHolder.getContext(); +//getAuthorities().toString() - 404 + //.getname() - work + String str2= securityContext.getAuthentication().getDetails().toString()+" "; + str2+= securityContext.toString()+" Hi ADmin"; + return str2; + } + + @PreAuthorize("hasAnyRole('ROLE_GM')") + @GetMapping ("/gm") + public String isGm(){ + return "Hi GM"; + } + @PreAuthorize("hasAnyRole('ROLE_ADMIN')") + @GetMapping ("/user") + public String isUser(){ + return "Hi you just user"; + } + + +} diff --git a/src/main/java/ru/hedin/modelka/domain/ModUser.java b/src/main/java/ru/hedin/modelka/domain/ModUser.java index 9bd2eea..a4155b1 100644 --- a/src/main/java/ru/hedin/modelka/domain/ModUser.java +++ b/src/main/java/ru/hedin/modelka/domain/ModUser.java @@ -1,6 +1,10 @@ package ru.hedin.modelka.domain; +import org.springframework.security.core.GrantedAuthority; +import ru.hedin.modelka.security.UserRole; + import javax.persistence.*; +import java.util.*; @Entity @Table(name = "mod_user") @@ -12,13 +16,56 @@ public class ModUser { private long id; @Column (nullable = false, unique = true ) private String userName; + @Column (nullable = false, unique = true ) private String password; - private long longRoles = 1; //ROLE_USER + @Column (nullable = false ) + private long longRoles = 1; //ROLE_USER + @Transient + private Set roles; // @Bean // public ModUser() { // } + public long getLongRoles() { + return longRoles; + } + + public void setLongRoles(long longRoles) { + this.longRoles = longRoles; + } + //calculation of longRoles + public void setLongRoles(Set roleSet) { + longRoles=0; + roles.forEach( (rol)->{ + longRoles+= (long) Math.pow(2,rol.ordinal()); + }); + + } + + public Set getRoles() { + long tempLongRoles = longRoles; + + + if (roles== null) { roles = new HashSet(); } + roles.add(UserRole.ROLE_USER); + longRoles-=1; + + while (tempLongRoles>0) { + if (tempLongRoles>=4) { + tempLongRoles-=4; + roles.add(UserRole.ROLE_GM); + } + if (tempLongRoles>=2) { + tempLongRoles-=2; + roles.add(UserRole.ROLE_ADMIN); + } + } + + + return roles; + } + public long getId() { return id; } @@ -30,6 +77,7 @@ public void setId(long id) { public String getUserName() { return userName; } + public String getLogin() {return userName;} public void setUserName(String login) { this.userName = login; diff --git a/src/main/java/ru/hedin/modelka/security/AuthProvider.java b/src/main/java/ru/hedin/modelka/security/AuthProvider.java index 457b228..727f2e4 100644 --- a/src/main/java/ru/hedin/modelka/security/AuthProvider.java +++ b/src/main/java/ru/hedin/modelka/security/AuthProvider.java @@ -1,34 +1,46 @@ package ru.hedin.modelka.security; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.authentication.AuthenticationProvider; import org.springframework.security.authentication.BadCredentialsException; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.core.Authentication; import org.springframework.security.core.AuthenticationException; +import ru.hedin.modelka.domain.ModUser; +import ru.hedin.modelka.service.UserRepository; +import org.apache.commons.codec.digest.DigestUtils; import temp.User; +import javax.xml.bind.DatatypeConverter; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; + public class AuthProvider implements AuthenticationProvider { -// @Authowired -// private UserRepository userRepository; + @Autowired + private UserRepository userRepository; @Override public Authentication authenticate(Authentication authentication) throws AuthenticationException { String username = authentication.getName().trim(); String password = authentication.getCredentials().toString().trim(); -//// User user = userRepository.getUserByLogin(username); -// if (null == user) { -// throw new BadCredentialsException(""); -// } + ModUser user = userRepository.getUserByLogin(username); + if (null == user) { + throw new BadCredentialsException(""); + } // return localAuth(password, user); - return localAuth(password, new User()); + return localAuth(password, user); } - private Authentication localAuth(String password, User user) { - String hash = password; //Тут hash алгорититм нужен -// if (hash.equals(user.getPassword())) { + private Authentication localAuth(String password, ModUser user) { + // String hash = password; //Тут hash алгорититм нужен + // Hash похоже лишнийtemp = "827ccb0eea8a706c4c34a16891f84e7b" - 12345 + String md5Hex = DigestUtils + .md5Hex(password).toLowerCase(); + + if (md5Hex.equals(user.getPassword())) { return new AuthenticationImpl(user); -// } -// throw new BadCredentialsException(""); + } + throw new BadCredentialsException(""); } @Override diff --git a/src/main/java/ru/hedin/modelka/security/AuthenticationImpl.java b/src/main/java/ru/hedin/modelka/security/AuthenticationImpl.java index 875fdcd..58b4a4b 100644 --- a/src/main/java/ru/hedin/modelka/security/AuthenticationImpl.java +++ b/src/main/java/ru/hedin/modelka/security/AuthenticationImpl.java @@ -2,16 +2,17 @@ import org.springframework.security.core.Authentication; import org.springframework.security.core.GrantedAuthority; +import ru.hedin.modelka.domain.ModUser; import temp.User; import java.util.Collection; public class AuthenticationImpl implements Authentication { - private User user; + private ModUser user; private boolean authenticated; private SecurityUserDetails userDetails; - public AuthenticationImpl(User user) { + public AuthenticationImpl(ModUser user) { userDetails = new SecurityUserDetails(user); this.user = user; authenticated = true; @@ -52,7 +53,7 @@ public String getName() { return user.getLogin(); } - public User getUser() { + public ModUser getUser() { return user; } } diff --git a/src/main/java/ru/hedin/modelka/security/SecurityUserDetails.java b/src/main/java/ru/hedin/modelka/security/SecurityUserDetails.java index 291981b..5eeb453 100644 --- a/src/main/java/ru/hedin/modelka/security/SecurityUserDetails.java +++ b/src/main/java/ru/hedin/modelka/security/SecurityUserDetails.java @@ -2,14 +2,15 @@ import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.userdetails.UserDetails; +import ru.hedin.modelka.domain.ModUser; import temp.User; import java.util.Collection; public class SecurityUserDetails implements UserDetails { - private User user; + private ModUser user; - public SecurityUserDetails(User user) { + public SecurityUserDetails(ModUser user) { this.user = user; } @@ -48,7 +49,7 @@ public boolean isEnabled() { return true; } - public User getUser() { + public ModUser getUser() { return user; } } diff --git a/src/main/java/ru/hedin/modelka/security/UserRole.java b/src/main/java/ru/hedin/modelka/security/UserRole.java index 02163cd..2df8a4e 100644 --- a/src/main/java/ru/hedin/modelka/security/UserRole.java +++ b/src/main/java/ru/hedin/modelka/security/UserRole.java @@ -3,11 +3,13 @@ import org.springframework.security.core.GrantedAuthority; public enum UserRole implements GrantedAuthority { - FirstRole, - SecondRole; + ROLE_USER, + ROLE_ADMIN, + ROLE_GM; @Override public String getAuthority() { + return toString(); } } diff --git a/src/main/java/ru/hedin/modelka/service/UserRepository.java b/src/main/java/ru/hedin/modelka/service/UserRepository.java index e857975..6e25ea5 100644 --- a/src/main/java/ru/hedin/modelka/service/UserRepository.java +++ b/src/main/java/ru/hedin/modelka/service/UserRepository.java @@ -28,9 +28,10 @@ public boolean contains (ModUser modUser) { // return entityManager.createQuery("select u from User u",User).getResultList(); // } @Transactional - public ModUser findUserByName (String username){ + public ModUser getUserByLogin (String username){ List modUserList = entityManager.createQuery("select u from ModUser u",ModUser.class).getResultList(); + for (ModUser us: modUserList) { if (username.equalsIgnoreCase (us.getUserName())) { return us;} From ef631b70755dfba9f629fc2c542e4210d6515c9a Mon Sep 17 00:00:00 2001 From: fzhulitov Date: Fri, 11 Jun 2021 21:24:48 +0300 Subject: [PATCH 3/7] Postgres connected database spring on local host user = springuser password = 12345 Registration work, write to base (login, pass) if not already registred md5 work on registration and login Base Hold md5 password settings from security.xml work, not all can't make sucseclogin redirect/// All over work One strange think - registration can make only not logged Principal (Anonimous)- it is ok, by logic, but may be need to all ??? --- .../modelka/config/WebSecurityConfig.java | 29 ++++++++++++++----- .../controller/SecurityController.java | 17 +++++++---- .../controller/TestRoleController.java | 4 +-- .../java/ru/hedin/modelka/domain/ModUser.java | 3 +- .../modelka/security/SecurityUserDetails.java | 6 ++-- .../ru/hedin/modelka/security/UserRole.java | 4 +++ .../hedin/modelka/service/UserRepository.java | 24 +++++++++++---- src/main/resources/security.xml | 12 ++++++-- 8 files changed, 72 insertions(+), 27 deletions(-) diff --git a/src/main/java/ru/hedin/modelka/config/WebSecurityConfig.java b/src/main/java/ru/hedin/modelka/config/WebSecurityConfig.java index cba0eea..2dc2cce 100644 --- a/src/main/java/ru/hedin/modelka/config/WebSecurityConfig.java +++ b/src/main/java/ru/hedin/modelka/config/WebSecurityConfig.java @@ -2,10 +2,12 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.ImportResource; import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; import org.springframework.security.config.annotation.authentication.configuration.EnableGlobalAuthentication; +import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; @@ -13,22 +15,32 @@ import org.springframework.security.crypto.password.PasswordEncoder; @Configuration -@EnableWebSecurity (debug = true) +//@EnableWebSecurity (debug = true) +/// give 2 bean AuthenticationManager - runtime @EnableGlobalMethodSecurity(prePostEnabled = true) +@EnableWebSecurity @EnableGlobalAuthentication -//@EnableWebSecurity +@ComponentScan @ImportResource("classpath:security.xml") public class WebSecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { + + // http.authorizeRequests() + // .anyRequest().authenticated() + // .and().httpBasic(); + + +/* + http .csrf().disable() - .authorizeRequests() - .antMatchers("/").permitAll() + .authorizeRequests() .antMatchers("/register").permitAll() .antMatchers("/log").permitAll() - .anyRequest().fullyAuthenticated() - .antMatchers("/username").authenticated() + .antMatchers("/username").permitAll() + .anyRequest().authenticated() + .antMatchers("/test/admin").hasRole("ROLE_ADMIN") .antMatchers("/test/gm").hasRole("ROLE_GM") .antMatchers("/test/user").hasRole("ROLE_USER") @@ -38,7 +50,10 @@ protected void configure(HttpSecurity http) throws Exception { .permitAll() .and() .logout() - .permitAll(); + .permitAll() + .and().httpBasic(); +*/ + } diff --git a/src/main/java/ru/hedin/modelka/controller/SecurityController.java b/src/main/java/ru/hedin/modelka/controller/SecurityController.java index a3d1fa7..e73255f 100644 --- a/src/main/java/ru/hedin/modelka/controller/SecurityController.java +++ b/src/main/java/ru/hedin/modelka/controller/SecurityController.java @@ -2,6 +2,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.actuate.trace.http.HttpTrace; +import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.core.Authentication; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @@ -23,16 +24,20 @@ public class SecurityController { @RequestMapping(value = "/username", method = RequestMethod.GET) @ResponseBody - public String currentUserName (Principal authentication) { + // @PreAuthorize("isAuthenticated()") + // Principal is null - strange + public String currentUserName (Authentication authentication) { // String to collect info - String str; + String str=""; // Principal info // странным образом стал выдавать нул поинтер на аут.гетнаме - str = " principal name "+authentication.getName()+" class "+authentication.getClass()+"/n"; + if (authentication==null){return "Not logged in";} + + str = " principal name "+authentication.getName()+"\n"; // ROles - for (UserRole role: UserRole.values() ) { - str+= "ROle name "+role.name()+" ROle ordinal "+role.ordinal()+"/n "; - } + // for (UserRole role: UserRole.values() ) { + // str+= "ROle name "+role.name()+" ROle ordinal "+role.ordinal()+"/n "; + // } // ROles from user ModUser user = rep.getUserByLogin(authentication.getName()); Set ur = user.getRoles(); diff --git a/src/main/java/ru/hedin/modelka/controller/TestRoleController.java b/src/main/java/ru/hedin/modelka/controller/TestRoleController.java index cdeaa87..de3618d 100644 --- a/src/main/java/ru/hedin/modelka/controller/TestRoleController.java +++ b/src/main/java/ru/hedin/modelka/controller/TestRoleController.java @@ -18,8 +18,8 @@ public String isAdmin(){ SecurityContext securityContext = SecurityContextHolder.getContext(); //getAuthorities().toString() - 404 //.getname() - work - String str2= securityContext.getAuthentication().getDetails().toString()+" "; - str2+= securityContext.toString()+" Hi ADmin"; + String str2= securityContext.getAuthentication().getName()+" "; + str2+= " Hi ADmin"; return str2; } diff --git a/src/main/java/ru/hedin/modelka/domain/ModUser.java b/src/main/java/ru/hedin/modelka/domain/ModUser.java index a4155b1..679a5d0 100644 --- a/src/main/java/ru/hedin/modelka/domain/ModUser.java +++ b/src/main/java/ru/hedin/modelka/domain/ModUser.java @@ -8,6 +8,7 @@ @Entity @Table(name = "mod_user") + public class ModUser { @Id // @GeneratedValue(strategy = GenerationType.IDENTITY) @@ -49,7 +50,7 @@ public Set getRoles() { if (roles== null) { roles = new HashSet(); } roles.add(UserRole.ROLE_USER); - longRoles-=1; + tempLongRoles-=1; while (tempLongRoles>0) { if (tempLongRoles>=4) { diff --git a/src/main/java/ru/hedin/modelka/security/SecurityUserDetails.java b/src/main/java/ru/hedin/modelka/security/SecurityUserDetails.java index 5eeb453..79fb511 100644 --- a/src/main/java/ru/hedin/modelka/security/SecurityUserDetails.java +++ b/src/main/java/ru/hedin/modelka/security/SecurityUserDetails.java @@ -16,17 +16,17 @@ public SecurityUserDetails(ModUser user) { @Override public Collection getAuthorities() { - return null; + return user.getRoles(); } @Override public String getPassword() { - return null; + return user.getPassword(); } @Override public String getUsername() { - return null; + return user.getUserName(); } @Override diff --git a/src/main/java/ru/hedin/modelka/security/UserRole.java b/src/main/java/ru/hedin/modelka/security/UserRole.java index 2df8a4e..ca40b5a 100644 --- a/src/main/java/ru/hedin/modelka/security/UserRole.java +++ b/src/main/java/ru/hedin/modelka/security/UserRole.java @@ -1,6 +1,9 @@ package ru.hedin.modelka.security; import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.authority.SimpleGrantedAuthority; + +import java.util.Set; public enum UserRole implements GrantedAuthority { ROLE_USER, @@ -12,4 +15,5 @@ public String getAuthority() { return toString(); } + } diff --git a/src/main/java/ru/hedin/modelka/service/UserRepository.java b/src/main/java/ru/hedin/modelka/service/UserRepository.java index 6e25ea5..be9c328 100644 --- a/src/main/java/ru/hedin/modelka/service/UserRepository.java +++ b/src/main/java/ru/hedin/modelka/service/UserRepository.java @@ -4,7 +4,9 @@ import ru.hedin.modelka.domain.ModUser; import javax.persistence.EntityManager; +import javax.persistence.NoResultException; import javax.persistence.PersistenceContext; +import javax.persistence.TypedQuery; import javax.transaction.Transactional; import java.util.List; @@ -29,13 +31,23 @@ public boolean contains (ModUser modUser) { // } @Transactional public ModUser getUserByLogin (String username){ + ModUser modUser=null; + TypedQuery query = entityManager.createQuery( + "select u from ModUser u where u.userName = :username",ModUser.class); + try { + modUser = query.setParameter("username", username).getSingleResult(); + } + catch (NoResultException e ){ +//Ignore this because as per your logic this is ok! + } - List modUserList = entityManager.createQuery("select u from ModUser u",ModUser.class).getResultList(); + return modUser; + // List modUserList = entityManager.createQuery("select u from ModUser u",ModUser.class).getResultList(); - for (ModUser us: modUserList) { - if (username.equalsIgnoreCase (us.getUserName())) { - return us;} - } - return null; + // for (ModUser us: modUserList) { + // if (username.equalsIgnoreCase (us.getUserName())) { + // return us;} + // } + // return null; } } diff --git a/src/main/resources/security.xml b/src/main/resources/security.xml index 1dab5f5..4862741 100644 --- a/src/main/resources/security.xml +++ b/src/main/resources/security.xml @@ -22,9 +22,17 @@ - + + + + + + + + + - From d315b3ed3be1d64c457bbf6a57a3c46c258d3d83 Mon Sep 17 00:00:00 2001 From: fzhulitov Date: Sun, 13 Jun 2021 09:11:39 +0300 Subject: [PATCH 4/7] Registration backend and login Done all --- .gitignore | 8 + pom.xml | 34 +- .../java/ru/hedin/modelka/Application.java | 4 +- .../modelka/controller/LoginController.java | 50 - .../controller/RegistrationController.java | 18 +- .../controller/TestRoleController.java | 13 +- .../java/ru/hedin/modelka/domain/ModUser.java | 29 +- .../modelka/domain/RegistrationService.java | 6 + .../model/UserDetailsRequestModel.java | 27 - .../hedin/modelka/security/AuthProvider.java | 3 +- .../modelka/security/SecurityUserDetails.java | 3 +- src/main/resources/security.xml | 6 +- src/main/resources/templates/greeting.html | 11 + ui/package-lock.json | 19989 +++++++++++++++- 14 files changed, 20039 insertions(+), 162 deletions(-) delete mode 100644 src/main/java/ru/hedin/modelka/controller/LoginController.java delete mode 100644 src/main/java/ru/hedin/modelka/model/UserDetailsRequestModel.java create mode 100644 src/main/resources/templates/greeting.html diff --git a/.gitignore b/.gitignore index 7893ab6..6254ce0 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,11 @@ /modelka.iml /ui/ui.iml /main.iml +/src/main/resources/static/node_modules/ +/src/main/.yarn/* +!.yarn/cache +!.yarn/patches +!.yarn/plugins +!.yarn/releases +!.yarn/sdks +!.yarn/versions diff --git a/pom.xml b/pom.xml index 3501659..749e7ad 100644 --- a/pom.xml +++ b/pom.xml @@ -22,15 +22,23 @@ spring-boot-maven-plugin 2.2.1.RELEASE - - - - - - - - + + com.github.eirslett + frontend-maven-plugin + 1.12.0 + + + + + + + src/main/resources + + static/node_modules/**/*.* + + + @@ -39,7 +47,12 @@ - + + com.github.eirslett + frontend-maven-plugin + 1.12.0 + maven-plugin + org.mozilla rhino @@ -94,10 +107,11 @@ org.springframework.boot spring-boot-starter-data-jpa + \ No newline at end of file diff --git a/src/main/java/ru/hedin/modelka/Application.java b/src/main/java/ru/hedin/modelka/Application.java index ca174d8..f1bd5a9 100644 --- a/src/main/java/ru/hedin/modelka/Application.java +++ b/src/main/java/ru/hedin/modelka/Application.java @@ -2,11 +2,9 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.data.jpa.repository.config.EnableJpaRepositories; -import org.springframework.data.repository.config.BootstrapMode; @SpringBootApplication -@EnableJpaRepositories (bootstrapMode = BootstrapMode.LAZY) + public class Application { diff --git a/src/main/java/ru/hedin/modelka/controller/LoginController.java b/src/main/java/ru/hedin/modelka/controller/LoginController.java deleted file mode 100644 index bb6520a..0000000 --- a/src/main/java/ru/hedin/modelka/controller/LoginController.java +++ /dev/null @@ -1,50 +0,0 @@ -package ru.hedin.modelka.controller; - - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.MediaType; -import org.springframework.security.core.authority.SimpleGrantedAuthority; -import org.springframework.security.provisioning.InMemoryUserDetailsManager; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; -import ru.hedin.modelka.domain.ModUser; -import ru.hedin.modelka.model.UserDetailsRequestModel; -import ru.hedin.modelka.service.UserRepository; - -import java.util.Collections; - -@RestController("/log") -@RequestMapping("/log") -public class LoginController { -public InMemoryUserDetailsManager inMemoryUserDetailsManager; - @Autowired - UserRepository userRepository; - - @PostMapping( name = "", - consumes = {MediaType.APPLICATION_JSON_VALUE} - ) - public String loginFromBase (@RequestBody UserDetailsRequestModel requestModel){ - - ModUser modUser; - String str = requestModel.getLogin(); - modUser = userRepository.getUserByLogin(str); - String passwd = requestModel.getPassword(); - - if (modUser == null) {return "no such user";} - - if (passwd.equals(modUser.getPassword())) { - - org.springframework.security.core.userdetails.User userd = - new org.springframework.security.core.userdetails.User(str, passwd, Collections.singletonList(new SimpleGrantedAuthority("USER"))); - - inMemoryUserDetailsManager = new InMemoryUserDetailsManager(userd); - return "all write"; - } - - return "wrong password"; - - } - -} diff --git a/src/main/java/ru/hedin/modelka/controller/RegistrationController.java b/src/main/java/ru/hedin/modelka/controller/RegistrationController.java index 160b590..5efecb8 100644 --- a/src/main/java/ru/hedin/modelka/controller/RegistrationController.java +++ b/src/main/java/ru/hedin/modelka/controller/RegistrationController.java @@ -1,12 +1,10 @@ package ru.hedin.modelka.controller; -import org.apache.commons.codec.digest.DigestUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.*; import ru.hedin.modelka.domain.ModUser; import ru.hedin.modelka.domain.RegistrationService; -import ru.hedin.modelka.model.UserDetailsRequestModel; import ru.hedin.modelka.service.TestRepository; import ru.hedin.modelka.service.UserRepository; @@ -19,7 +17,7 @@ public class RegistrationController { @Autowired private UserRepository userRepository; @Autowired - RegistrationService rs ; + private RegistrationService registrationService ; @GetMapping(name = "") public String test() { @@ -30,27 +28,19 @@ public String test() { @PostMapping(name = "", consumes = {MediaType.APPLICATION_JSON_VALUE} ) - public String registration(@RequestBody UserDetailsRequestModel requestModel) { + public String registration(@RequestBody ModUser requestModel) { ModUser modUser; - modUser = userRepository.getUserByLogin(requestModel.getLogin()); + modUser = userRepository.getUserByLogin(requestModel.getUserName()); if (modUser != null) { return "Already Exist"; } - modUser = new ModUser(); - modUser.setUserName(requestModel.getLogin()); - String md5Hex = DigestUtils - .md5Hex(requestModel.getPassword()).toLowerCase(); - - modUser.setPassword(md5Hex); - // call Service - if (rs.creteUser( modUser)){ + if (registrationService.creteUser( requestModel)){ return "All Ok"; } - return "something wrong"; } diff --git a/src/main/java/ru/hedin/modelka/controller/TestRoleController.java b/src/main/java/ru/hedin/modelka/controller/TestRoleController.java index de3618d..8b2f30f 100644 --- a/src/main/java/ru/hedin/modelka/controller/TestRoleController.java +++ b/src/main/java/ru/hedin/modelka/controller/TestRoleController.java @@ -6,14 +6,17 @@ import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import ru.hedin.modelka.security.HasUserRoles; +import ru.hedin.modelka.security.UserRole; @RestController("/test") @RequestMapping("/test") public class TestRoleController { -@PreAuthorize("hasAnyRole('ROLE_ADMIN')") -@GetMapping ("/admin") +//@PreAuthorize("hasAnyRole('ROLE_ADMIN')") +@HasUserRoles({UserRole.ROLE_ADMIN}) + @GetMapping ("/admin") public String isAdmin(){ SecurityContext securityContext = SecurityContextHolder.getContext(); //getAuthorities().toString() - 404 @@ -22,13 +25,13 @@ public String isAdmin(){ str2+= " Hi ADmin"; return str2; } - - @PreAuthorize("hasAnyRole('ROLE_GM')") + @HasUserRoles({UserRole.ROLE_GM}) @GetMapping ("/gm") public String isGm(){ return "Hi GM"; } - @PreAuthorize("hasAnyRole('ROLE_ADMIN')") + + @HasUserRoles({UserRole.ROLE_USER}) @GetMapping ("/user") public String isUser(){ return "Hi you just user"; diff --git a/src/main/java/ru/hedin/modelka/domain/ModUser.java b/src/main/java/ru/hedin/modelka/domain/ModUser.java index 679a5d0..41f592e 100644 --- a/src/main/java/ru/hedin/modelka/domain/ModUser.java +++ b/src/main/java/ru/hedin/modelka/domain/ModUser.java @@ -5,6 +5,7 @@ import javax.persistence.*; import java.util.*; +import org.apache.commons.lang3.EnumUtils; @Entity @Table(name = "mod_user") @@ -37,34 +38,14 @@ public void setLongRoles(long longRoles) { } //calculation of longRoles public void setLongRoles(Set roleSet) { - longRoles=0; - roles.forEach( (rol)->{ - longRoles+= (long) Math.pow(2,rol.ordinal()); - }); + + longRoles = EnumUtils.generateBitVector(UserRole.class,roles); } public Set getRoles() { - long tempLongRoles = longRoles; - - - if (roles== null) { roles = new HashSet(); } - roles.add(UserRole.ROLE_USER); - tempLongRoles-=1; - - while (tempLongRoles>0) { - if (tempLongRoles>=4) { - tempLongRoles-=4; - roles.add(UserRole.ROLE_GM); - } - if (tempLongRoles>=2) { - tempLongRoles-=2; - roles.add(UserRole.ROLE_ADMIN); - } - } - - - return roles; + + return EnumUtils.processBitVector(UserRole.class,longRoles); } public long getId() { diff --git a/src/main/java/ru/hedin/modelka/domain/RegistrationService.java b/src/main/java/ru/hedin/modelka/domain/RegistrationService.java index c8dc5eb..13cbfcd 100644 --- a/src/main/java/ru/hedin/modelka/domain/RegistrationService.java +++ b/src/main/java/ru/hedin/modelka/domain/RegistrationService.java @@ -1,5 +1,6 @@ package ru.hedin.modelka.domain; +import org.apache.commons.codec.digest.DigestUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.stereotype.Service; @@ -22,6 +23,11 @@ public boolean creteUser (ModUser modUser){ //need to set Roles and maybe something else + String toHash = modUser.getLogin()+"salt"+modUser.getPassword(); + String md5Hex = DigestUtils + .md5Hex(toHash).toLowerCase(); + modUser.setPassword(md5Hex); + if (userRepository.saveUser(modUser)) { return true; } diff --git a/src/main/java/ru/hedin/modelka/model/UserDetailsRequestModel.java b/src/main/java/ru/hedin/modelka/model/UserDetailsRequestModel.java deleted file mode 100644 index faaa5aa..0000000 --- a/src/main/java/ru/hedin/modelka/model/UserDetailsRequestModel.java +++ /dev/null @@ -1,27 +0,0 @@ -package ru.hedin.modelka.model; - -public class UserDetailsRequestModel { - private String login; - private String password; - - public String getLogin() { - return login; - } - - public void setLogin(String login) { - this.login = login; - } - - public String getPassword() { - return password; - } - - public void setPassword(String password) { - this.password = password; - } - - @Override - public String toString() { - return "super.toString()"+login+" "+password; - } -} diff --git a/src/main/java/ru/hedin/modelka/security/AuthProvider.java b/src/main/java/ru/hedin/modelka/security/AuthProvider.java index 727f2e4..b4f7048 100644 --- a/src/main/java/ru/hedin/modelka/security/AuthProvider.java +++ b/src/main/java/ru/hedin/modelka/security/AuthProvider.java @@ -34,8 +34,9 @@ public Authentication authenticate(Authentication authentication) throws Authent private Authentication localAuth(String password, ModUser user) { // String hash = password; //Тут hash алгорититм нужен // Hash похоже лишнийtemp = "827ccb0eea8a706c4c34a16891f84e7b" - 12345 + String toHash = user.getLogin()+"salt"+password; String md5Hex = DigestUtils - .md5Hex(password).toLowerCase(); + .md5Hex(toHash).toLowerCase(); if (md5Hex.equals(user.getPassword())) { return new AuthenticationImpl(user); diff --git a/src/main/java/ru/hedin/modelka/security/SecurityUserDetails.java b/src/main/java/ru/hedin/modelka/security/SecurityUserDetails.java index 79fb511..2cf6981 100644 --- a/src/main/java/ru/hedin/modelka/security/SecurityUserDetails.java +++ b/src/main/java/ru/hedin/modelka/security/SecurityUserDetails.java @@ -21,7 +21,8 @@ public Collection getAuthorities() { @Override public String getPassword() { - return user.getPassword(); +//Hedin ask return user.getPassword(); + return null; } @Override diff --git a/src/main/resources/security.xml b/src/main/resources/security.xml index 4862741..5dc7b6c 100644 --- a/src/main/resources/security.xml +++ b/src/main/resources/security.xml @@ -26,10 +26,10 @@ - - + + + + + + Hello demo + + +
+