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/.run/Crome-debug.run.xml b/.run/Crome-debug.run.xml new file mode 100644 index 0000000..19e1051 --- /dev/null +++ b/.run/Crome-debug.run.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/pom.xml b/pom.xml index e8075b7..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 @@ -78,10 +91,27 @@ hibernate-entitymanager 5.4.27.Final + + + org.postgresql + postgresql + 42.2.20 + + + org.springframework.boot + spring-boot-starter-actuator + + 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 3a3a183..1a41834 100644 --- a/src/main/java/ru/hedin/modelka/Application.java +++ b/src/main/java/ru/hedin/modelka/Application.java @@ -2,11 +2,37 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.Bean; +import org.springframework.web.servlet.config.annotation.CorsRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @SpringBootApplication + + public class Application { public static void main(String[] args){ SpringApplication.run( Application.class, args ); - } -} + +/* + @Bean + public WebMvcConfigurer corsConfigurer() { + return new WebMvcConfigurer() { + @Override + public void addCorsMappings(CorsRegistry registry) { + registry.addMapping("/*") + .allowedOrigins("http://localhost:8080") + .allowedMethods("POST","GET") + // .allowedHeaders("Content-Type", "X-Requested-With", "accept", "Origin", "Access-Control-Request-Method", + // "Access-Control-Request-Headers") + .exposedHeaders("Access-Control-Allow-Origin", "Access-Control-Allow-Credentials") + // .allowCredentials(true).maxAge(3600); + + + ; + } + }; +*/ + }; + +}; diff --git a/src/main/java/ru/hedin/modelka/config/MvcConfig.java b/src/main/java/ru/hedin/modelka/config/MvcConfig.java index 8f5c00d..c428dc2 100644 --- a/src/main/java/ru/hedin/modelka/config/MvcConfig.java +++ b/src/main/java/ru/hedin/modelka/config/MvcConfig.java @@ -1,20 +1,45 @@ package ru.hedin.modelka.config; +import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.CorsRegistry; import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; @Configuration public class MvcConfig - implements WebMvcConfigurer -{ - public void addViewControllers( ViewControllerRegistry registry ) - { - registry.addViewController( "/" ) - .setViewName( "index" ); - registry.addViewController( "/main" ) - .setViewName( "main" ); - registry.addViewController( "/login" ) - .setViewName( "login" ); + implements WebMvcConfigurer { + public void addViewControllers(ViewControllerRegistry registry) { + registry.addViewController("/") + .setViewName("index"); + registry.addViewController("/main") + .setViewName("main"); + registry.addViewController("/login") + .setViewName("login"); + } -} + + @Override + // @Bean + + public void addCorsMappings(CorsRegistry registry) { + registry.addMapping("/**") + .allowedOrigins("http://localhost:3000") + .allowedMethods("POST","GET") + .allowedHeaders("Content-Type", "X-Requested-With", "accept", "Origin", "Access-Control-Request-Method", + "Access-Control-Request-Headers") + .exposedHeaders("Access-Control-Allow-Origin", "Access-Control-Allow-Credentials") + .allowCredentials(true).maxAge(3600); + + ; + + } + +// +// @Bean +// @Override +// public void addCorsMappings(CorsRegistry registry) { +// registry.addMapping("/**").allowedMethods("POST"); +// } + }; diff --git a/src/main/java/ru/hedin/modelka/config/PersistenceJPAConfig.java b/src/main/java/ru/hedin/modelka/config/PersistenceJPAConfig.java index 0c1583c..0f86396 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("postgres"); + dataSource.setPassword("qwe123"); 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 a330a4f..296505a 100644 --- a/src/main/java/ru/hedin/modelka/config/WebSecurityConfig.java +++ b/src/main/java/ru/hedin/modelka/config/WebSecurityConfig.java @@ -1,20 +1,78 @@ package ru.hedin.modelka.config; +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; -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; +import org.springframework.web.cors.CorsConfiguration; @Configuration +//@EnableWebSecurity (debug = true) +/// give 2 bean AuthenticationManager - runtime @EnableGlobalMethodSecurity(prePostEnabled = true) @EnableWebSecurity +@EnableGlobalAuthentication +@ComponentScan @ImportResource("classpath:security.xml") public class WebSecurityConfig extends WebSecurityConfigurerAdapter { + + @Override + protected void configure(HttpSecurity http) throws Exception { + + +// http.cors().configurationSource(request -> new CorsConfiguration().applyPermitDefaultValues()); +// +// +// http.formLogin().defaultSuccessUrl("/username", true); + // http.authorizeRequests() + // .anyRequest().authenticated() + // .and().httpBasic(); + + +/* + + http + .csrf().disable() + .authorizeRequests() + .antMatchers("/register").permitAll() + .antMatchers("/log").permitAll() + .antMatchers("/username").permitAll() + .anyRequest().authenticated() + + .antMatchers("/test/admin").hasRole("ROLE_ADMIN") + .antMatchers("/test/gm").hasRole("ROLE_GM") + .antMatchers("/test/user").hasRole("ROLE_USER") + .and() + .formLogin() + .loginPage("/login") + .permitAll() + .and() + .logout() + .permitAll() + .and().httpBasic(); +*/ + + } + + +// @Bean + + +/* + @Bean + public PasswordEncoder passwordEncoder(){ + return new BCryptPasswordEncoder(12); + } +*/ + // @Override // protected void configure(HttpSecurity http) throws Exception { // http diff --git a/src/main/java/ru/hedin/modelka/controller/RegistrationController.java b/src/main/java/ru/hedin/modelka/controller/RegistrationController.java index 65c60c2..70c7214 100644 --- a/src/main/java/ru/hedin/modelka/controller/RegistrationController.java +++ b/src/main/java/ru/hedin/modelka/controller/RegistrationController.java @@ -1,19 +1,46 @@ 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.service.TestRepository; +import ru.hedin.modelka.service.UserRepository; @RestController("/register") @RequestMapping("/register") public class RegistrationController { + @Autowired private TestRepository testRepository; + @Autowired + private UserRepository userRepository; + @Autowired + private RegistrationService registrationService; + @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 ModUser requestModel) { + + ModUser modUser; + + modUser = userRepository.getUserByLogin(requestModel.getUserName()); + + if (modUser != null) { + return "Already Exist"; + } +// call Service + if (registrationService.creteUser(requestModel)) { + 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..4a7e3e0 --- /dev/null +++ b/src/main/java/ru/hedin/modelka/controller/SecurityController.java @@ -0,0 +1,59 @@ +package ru.hedin.modelka.controller; + +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; +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.HashMap; +import java.util.Map; +import java.util.Set; + +@RestController +public class SecurityController { + + @Autowired + UserRepository rep; + + @RequestMapping(value = "/username", method = RequestMethod.GET) + @ResponseBody + // @PreAuthorize("isAuthenticated()") + // Principal is null - strange + public Map currentUserName(Authentication authentication) { + Map map = new HashMap(); + map.put("test", authentication.getName()); + return map; + // String to collect info +// String str = ""; +// // Principal info +// // странным образом стал выдавать нул поинтер на аут.гетнаме +// 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 "; +// // } +//// ROles from user +// ModUser user = rep.getUserByLogin(authentication.getName()); +// if (null == user) +// return str + "test"; +// 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..8b2f30f --- /dev/null +++ b/src/main/java/ru/hedin/modelka/controller/TestRoleController.java @@ -0,0 +1,41 @@ +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; +import ru.hedin.modelka.security.HasUserRoles; +import ru.hedin.modelka.security.UserRole; + +@RestController("/test") +@RequestMapping("/test") +public class TestRoleController { + + +//@PreAuthorize("hasAnyRole('ROLE_ADMIN')") +@HasUserRoles({UserRole.ROLE_ADMIN}) + @GetMapping ("/admin") + public String isAdmin(){ + SecurityContext securityContext = SecurityContextHolder.getContext(); +//getAuthorities().toString() - 404 + //.getname() - work + String str2= securityContext.getAuthentication().getName()+" "; + str2+= " Hi ADmin"; + return str2; + } + @HasUserRoles({UserRole.ROLE_GM}) + @GetMapping ("/gm") + public String isGm(){ + return "Hi GM"; + } + + @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 new file mode 100644 index 0000000..41f592e --- /dev/null +++ b/src/main/java/ru/hedin/modelka/domain/ModUser.java @@ -0,0 +1,75 @@ +package ru.hedin.modelka.domain; + +import org.springframework.security.core.GrantedAuthority; +import ru.hedin.modelka.security.UserRole; + +import javax.persistence.*; +import java.util.*; +import org.apache.commons.lang3.EnumUtils; + +@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; + @Column (nullable = false, unique = true ) + private String password; + @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 = EnumUtils.generateBitVector(UserRole.class,roles); + + } + + public Set getRoles() { + + return EnumUtils.processBitVector(UserRole.class,longRoles); + } + + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + + public String getUserName() { + return userName; + } + public String getLogin() {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..13cbfcd --- /dev/null +++ b/src/main/java/ru/hedin/modelka/domain/RegistrationService.java @@ -0,0 +1,36 @@ +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; +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 + + + String toHash = modUser.getLogin()+"salt"+modUser.getPassword(); + String md5Hex = DigestUtils + .md5Hex(toHash).toLowerCase(); + modUser.setPassword(md5Hex); + + 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/domain/User.java deleted file mode 100644 index 3e2719e..0000000 --- a/src/main/java/ru/hedin/modelka/domain/User.java +++ /dev/null @@ -1,38 +0,0 @@ -package ru.hedin.modelka.domain; - -import javax.persistence.*; - -@Entity -@Table(name = "m_user") -public class User { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private long id; - - private String login; - private String password; - - public long getId() { - return id; - } - - public void setId(long id) { - this.id = id; - } - - 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; - } -} diff --git a/src/main/java/ru/hedin/modelka/security/AuthProvider.java b/src/main/java/ru/hedin/modelka/security/AuthProvider.java index 457b228..5dbb4d7 100644 --- a/src/main/java/ru/hedin/modelka/security/AuthProvider.java +++ b/src/main/java/ru/hedin/modelka/security/AuthProvider.java @@ -1,31 +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) { + ModUser user = userRepository.getUserByLogin(username); + if (null == user) { // throw new BadCredentialsException(""); -// } + user = new ModUser(); + user.setUserName(username); + } // 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 toHash = user.getLogin()+"salt"+password; + String md5Hex = DigestUtils + .md5Hex(toHash).toLowerCase(); + +// if (md5Hex.equals(user.getPassword())) { return new AuthenticationImpl(user); // } // throw new BadCredentialsException(""); 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/AuthenticationSuccessHandlerImpl.java b/src/main/java/ru/hedin/modelka/security/AuthenticationSuccessHandlerImpl.java new file mode 100644 index 0000000..be0c2cc --- /dev/null +++ b/src/main/java/ru/hedin/modelka/security/AuthenticationSuccessHandlerImpl.java @@ -0,0 +1,21 @@ +package ru.hedin.modelka.security; + +import org.springframework.security.core.Authentication; +import org.springframework.security.core.AuthenticationException; +import org.springframework.security.web.authentication.AuthenticationFailureHandler; +import org.springframework.security.web.authentication.AuthenticationSuccessHandler; + +import javax.servlet.FilterChain; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +public class AuthenticationSuccessHandlerImpl implements AuthenticationSuccessHandler { + @Override + public void onAuthenticationSuccess(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Authentication authentication) throws IOException, ServletException { + httpServletResponse.setStatus(200); + httpServletResponse.flushBuffer(); + //sendError(HttpServletResponse.SC_UNAUTHORIZED); + } +} diff --git a/src/main/java/ru/hedin/modelka/security/SecurityUserDetails.java b/src/main/java/ru/hedin/modelka/security/SecurityUserDetails.java index 291981b..2cf6981 100644 --- a/src/main/java/ru/hedin/modelka/security/SecurityUserDetails.java +++ b/src/main/java/ru/hedin/modelka/security/SecurityUserDetails.java @@ -2,30 +2,32 @@ 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; } @Override public Collection getAuthorities() { - return null; + return user.getRoles(); } @Override public String getPassword() { +//Hedin ask return user.getPassword(); return null; } @Override public String getUsername() { - return null; + return user.getUserName(); } @Override @@ -48,7 +50,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..ca40b5a 100644 --- a/src/main/java/ru/hedin/modelka/security/UserRole.java +++ b/src/main/java/ru/hedin/modelka/security/UserRole.java @@ -1,13 +1,19 @@ 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 { - FirstRole, - SecondRole; + ROLE_USER, + ROLE_ADMIN, + ROLE_GM; @Override public String getAuthority() { + return toString(); } + } 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..be9c328 --- /dev/null +++ b/src/main/java/ru/hedin/modelka/service/UserRepository.java @@ -0,0 +1,53 @@ +package ru.hedin.modelka.service; + +import org.springframework.stereotype.Repository; +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; + +@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 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! + } + + 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; + } +} 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 @@ - - + + diff --git a/src/main/resources/security.xml b/src/main/resources/security.xml index 1dab5f5..240ccf4 100644 --- a/src/main/resources/security.xml +++ b/src/main/resources/security.xml @@ -19,12 +19,22 @@ + - + + + + + + + - + diff --git a/src/main/resources/templates/greeting.html b/src/main/resources/templates/greeting.html new file mode 100644 index 0000000..1af495c --- /dev/null +++ b/src/main/resources/templates/greeting.html @@ -0,0 +1,11 @@ + + + + + Hello demo + + +
+