diff --git a/src/main/java/com/bktus/iserver/component/form/RegisterForm.java b/src/main/java/com/bktus/iserver/component/form/RegisterForm.java index 6abaa08..df5d045 100644 --- a/src/main/java/com/bktus/iserver/component/form/RegisterForm.java +++ b/src/main/java/com/bktus/iserver/component/form/RegisterForm.java @@ -8,6 +8,10 @@ import javax.validation.constraints.NotEmpty; @Data public class RegisterForm { + @NotEmpty + @Length(min = 4, max = 16) + private String nickName; + @NotEmpty @Length(min = 6, max = 24) private String username; diff --git a/src/main/java/com/bktus/iserver/configure/CustomWebSecurityConfig.java b/src/main/java/com/bktus/iserver/configure/CustomWebSecurityConfig.java index 03904d1..b32cc7c 100644 --- a/src/main/java/com/bktus/iserver/configure/CustomWebSecurityConfig.java +++ b/src/main/java/com/bktus/iserver/configure/CustomWebSecurityConfig.java @@ -1,8 +1,6 @@ package com.bktus.iserver.configure; -import com.bktus.iserver.configure.security.IServerPasswordEncoder; -import com.bktus.iserver.configure.security.IServerSecurityAuthenticationProvider; -import com.bktus.iserver.configure.security.IServerUsernamePasswordAuthenticationFilter; +import com.bktus.iserver.configure.security.*; import com.bktus.iserver.service.IServerUserDetailService; import com.bktus.iserver.service.IUserService; import org.springframework.context.annotation.Bean; @@ -28,6 +26,12 @@ public class CustomWebSecurityConfig extends WebSecurityConfigurerAdapter { @Resource private IServerPasswordEncoder passwordEncoder; + @Resource + private IServerAuthenticationSuccessHandler successHandler; + + @Resource + private IServerAuthenticationFailureHandler failureHandler; + @Override protected void configure(HttpSecurity http) throws Exception { http. @@ -59,7 +63,6 @@ public class CustomWebSecurityConfig extends WebSecurityConfigurerAdapter { web .ignoring() .antMatchers( - "/", "/build/**", "/dist/**", "/plugins/**", @@ -72,6 +75,8 @@ public class CustomWebSecurityConfig extends WebSecurityConfigurerAdapter { IServerUsernamePasswordAuthenticationFilter authenticationFilter() throws Exception { IServerUsernamePasswordAuthenticationFilter filter = new IServerUsernamePasswordAuthenticationFilter(); filter.setAllowSessionCreation(true); + filter.setAuthenticationSuccessHandler(successHandler); + filter.setAuthenticationFailureHandler(failureHandler); filter.setRequiresAuthenticationRequestMatcher( new AntPathRequestMatcher("/login", "POST")); diff --git a/src/main/java/com/bktus/iserver/configure/security/IServerAuthenticationFailureHandler.java b/src/main/java/com/bktus/iserver/configure/security/IServerAuthenticationFailureHandler.java new file mode 100644 index 0000000..a0ef9ad --- /dev/null +++ b/src/main/java/com/bktus/iserver/configure/security/IServerAuthenticationFailureHandler.java @@ -0,0 +1,19 @@ +package com.bktus.iserver.configure.security; + +import org.springframework.security.core.AuthenticationException; +import org.springframework.security.web.authentication.SimpleUrlAuthenticationFailureHandler; +import org.springframework.stereotype.Component; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +@Component +public class IServerAuthenticationFailureHandler extends SimpleUrlAuthenticationFailureHandler { + @Override + public void onAuthenticationFailure(HttpServletRequest request, HttpServletResponse response, AuthenticationException exception) + throws IOException, ServletException { + super.onAuthenticationFailure(request, response, exception); + } +} diff --git a/src/main/java/com/bktus/iserver/configure/security/IServerAuthenticationSuccessHandler.java b/src/main/java/com/bktus/iserver/configure/security/IServerAuthenticationSuccessHandler.java new file mode 100644 index 0000000..6e5aa00 --- /dev/null +++ b/src/main/java/com/bktus/iserver/configure/security/IServerAuthenticationSuccessHandler.java @@ -0,0 +1,39 @@ +package com.bktus.iserver.configure.security; + +import com.bktus.iserver.model.User; +import com.bktus.iserver.service.IUserService; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContext; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; +import java.io.IOException; +import java.util.Date; + +@Component +public class IServerAuthenticationSuccessHandler extends SavedRequestAwareAuthenticationSuccessHandler { + @Resource + IUserService userService; + + @Override + public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) + throws ServletException, IOException { + + // 添加Session + HttpSession session = request.getSession(); + SecurityContext securityContext = SecurityContextHolder.getContext(); + session.setAttribute("SPRING_SECURITY_CONTEXT", securityContext); + + User user = (User) authentication.getPrincipal(); + user.getUserInfo().setLoginDate(new Date()); + userService.save(user); + + super.onAuthenticationSuccess(request, response, authentication); + } +} diff --git a/src/main/java/com/bktus/iserver/configure/security/IServerSecurityAuthenticationProvider.java b/src/main/java/com/bktus/iserver/configure/security/IServerSecurityAuthenticationProvider.java index 8756238..9de0aad 100644 --- a/src/main/java/com/bktus/iserver/configure/security/IServerSecurityAuthenticationProvider.java +++ b/src/main/java/com/bktus/iserver/configure/security/IServerSecurityAuthenticationProvider.java @@ -35,7 +35,7 @@ public class IServerSecurityAuthenticationProvider implements AuthenticationProv throw new BadCredentialsException("Password IS Uncorrected"); } - return new UsernamePasswordAuthenticationToken(username, password, details.getAuthorities()); + return new UsernamePasswordAuthenticationToken(details, password, details.getAuthorities()); } @Override diff --git a/src/main/java/com/bktus/iserver/controller/ErrorController.java b/src/main/java/com/bktus/iserver/controller/ErrorController.java new file mode 100644 index 0000000..606ec00 --- /dev/null +++ b/src/main/java/com/bktus/iserver/controller/ErrorController.java @@ -0,0 +1,14 @@ +package com.bktus.iserver.controller; + +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; + +@Controller +@RequestMapping(value = "/error") +public class ErrorController { + + @RequestMapping(value = "/") + public String printErrorView(){ + return "500"; + } +} diff --git a/src/main/java/com/bktus/iserver/controller/IndexController.java b/src/main/java/com/bktus/iserver/controller/IndexController.java index 3dbb1fc..b594087 100644 --- a/src/main/java/com/bktus/iserver/controller/IndexController.java +++ b/src/main/java/com/bktus/iserver/controller/IndexController.java @@ -1,14 +1,25 @@ package com.bktus.iserver.controller; +import com.bktus.iserver.model.User; +import org.apache.tomcat.util.descriptor.web.ContextHandler; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContext; +import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; +import java.security.Principal; + @Controller @RequestMapping(value = "/") public class IndexController { @RequestMapping(value = "/") - public String indexView(){ + public String indexView(Model model, Authentication authentication){ + User user = (User) authentication.getPrincipal(); + model.addAttribute("username", authentication.getName()); + model.addAttribute("nickname", user.getUserInfo().getNickName()); return "index"; } diff --git a/src/main/java/com/bktus/iserver/controller/RegisterController.java b/src/main/java/com/bktus/iserver/controller/RegisterController.java index fcb0c76..ca55e07 100644 --- a/src/main/java/com/bktus/iserver/controller/RegisterController.java +++ b/src/main/java/com/bktus/iserver/controller/RegisterController.java @@ -10,6 +10,7 @@ import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import javax.annotation.Resource; +import java.util.Date; @Controller @RequestMapping(value = "/register") @@ -35,7 +36,8 @@ public class RegisterController { } User user = userService.createUser(registerForm.getUsername(), registerForm.getPassword()); - + user.getUserInfo().setRegisterDate(new Date()); + user.getUserInfo().setNickName(registerForm.getNickName()); userService.save(user); return "login"; diff --git a/src/main/java/com/bktus/iserver/controller/UserController.java b/src/main/java/com/bktus/iserver/controller/UserController.java new file mode 100644 index 0000000..6d2741c --- /dev/null +++ b/src/main/java/com/bktus/iserver/controller/UserController.java @@ -0,0 +1,23 @@ +package com.bktus.iserver.controller; + +import com.bktus.iserver.model.User; +import org.springframework.security.core.Authentication; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; + +@Controller +@RequestMapping("/user") +public class UserController { + + @RequestMapping(value = "profile/{username}") + public String printProfileView(Model model, @PathVariable String username, Authentication authentication){ + User user = (User) authentication.getPrincipal(); + model.addAttribute("username", user.getUsername()); + model.addAttribute("nickname", user.getUserInfo().getNickName()); + model.addAttribute("user", user); + return "profile"; + } + +} diff --git a/src/main/java/com/bktus/iserver/model/User.java b/src/main/java/com/bktus/iserver/model/User.java index f4791b4..f992bb9 100644 --- a/src/main/java/com/bktus/iserver/model/User.java +++ b/src/main/java/com/bktus/iserver/model/User.java @@ -27,6 +27,9 @@ public class User implements UserDetails { private boolean enabled = true; + @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY) + private UserInfo userInfo = new UserInfo(); + @ManyToMany(cascade = CascadeType.MERGE, fetch = FetchType.LAZY) private Set roles = new HashSet<>(); diff --git a/src/main/java/com/bktus/iserver/model/UserInfo.java b/src/main/java/com/bktus/iserver/model/UserInfo.java new file mode 100644 index 0000000..370acfd --- /dev/null +++ b/src/main/java/com/bktus/iserver/model/UserInfo.java @@ -0,0 +1,21 @@ +package com.bktus.iserver.model; + +import lombok.Data; + +import javax.persistence.*; +import java.util.Date; + +@Data +@Entity +@Table(name = "user_info") +public class UserInfo { + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private int id; + + private String nickName = ""; + + private Date registerDate; + + private Date loginDate; +} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 630be46..d975508 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,4 +1,4 @@ -server.port=8080 +server.port=80 spring.thymeleaf.prefix=classpath:templates/ spring.thymeleaf.suffix=.html diff --git a/src/main/resources/templates/component.html b/src/main/resources/templates/component.html index 501b918..a4a1e95 100644 --- a/src/main/resources/templates/component.html +++ b/src/main/resources/templates/component.html @@ -9,19 +9,19 @@ - AdminLTE Logo IServer - + diff --git a/src/main/resources/templates/index.html b/src/main/resources/templates/index.html index c4ada2c..00ac6bb 100644 --- a/src/main/resources/templates/index.html +++ b/src/main/resources/templates/index.html @@ -14,7 +14,7 @@ - +
diff --git a/src/main/resources/templates/layout.html b/src/main/resources/templates/layout.html index b6b3a4e..8b39df3 100644 --- a/src/main/resources/templates/layout.html +++ b/src/main/resources/templates/layout.html @@ -159,7 +159,7 @@ - +