diff --git a/pom.xml b/pom.xml index 817de48..7095c5f 100644 --- a/pom.xml +++ b/pom.xml @@ -41,13 +41,14 @@ org.springframework.boot spring-boot-starter-websocket - + com.h2database h2 runtime - + + org.json json @@ -74,7 +75,6 @@ compile - com.alibaba druid-spring-boot-starter @@ -91,12 +91,10 @@ net.sf.ehcache ehcache - - org.springframework.boot spring-boot-maven-plugin diff --git a/src/main/java/com/yaoyuan/jiscuss/controller/BaseController.java b/src/main/java/com/yaoyuan/jiscuss/controller/BaseController.java new file mode 100644 index 0000000..33db9f0 --- /dev/null +++ b/src/main/java/com/yaoyuan/jiscuss/controller/BaseController.java @@ -0,0 +1,48 @@ +package com.yaoyuan.jiscuss.controller; + +import com.yaoyuan.jiscuss.entity.UserInfo; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContext; +import org.springframework.security.core.userdetails.User; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; +import java.util.Enumeration; + +/** + * @author yaoyuan2.chu + * @Title: BaseController + * @Package com.yaoyuan.jiscuss.controller + * @Description: BaseController + * @date 2020/7/16 14:36 + */ +public class BaseController { + + /** + * 获取当前用户 + * @return + */ + protected UserInfo getUserInfo(HttpServletRequest request){ + UserInfo user = null; + //获得session对象 + HttpSession session = request.getSession(); + //取出session域中所有属性名 + Enumeration attributeNames = session.getAttributeNames(); + while (attributeNames.hasMoreElements()) { + System.out.println(attributeNames.nextElement()); + } + //SPRING_SECURITY_CONTEXT + Object spring_security_context = session.getAttribute("SPRING_SECURITY_CONTEXT"); + System.out.println(spring_security_context); + SecurityContext securityContext = (SecurityContext) spring_security_context; + if(securityContext!=null){ + //获得认证信息 + Authentication authentication = securityContext.getAuthentication(); + //获得用户详情 + Object principal = authentication.getPrincipal(); + user = (UserInfo) principal; + } + return user; + } + +} diff --git a/src/main/java/com/yaoyuan/jiscuss/controller/UserMsgController.java b/src/main/java/com/yaoyuan/jiscuss/controller/UserMsgController.java index 99b967f..85927c4 100644 --- a/src/main/java/com/yaoyuan/jiscuss/controller/UserMsgController.java +++ b/src/main/java/com/yaoyuan/jiscuss/controller/UserMsgController.java @@ -6,7 +6,7 @@ import org.springframework.stereotype.Controller; * 用户消息控制器 */ @Controller -public class UserMsgController { +public class UserMsgController extends BaseController { //首页最新消息 } diff --git a/src/main/java/com/yaoyuan/jiscuss/controller/UserOtherController.java b/src/main/java/com/yaoyuan/jiscuss/controller/UserOtherController.java index 41ada64..3efc54c 100644 --- a/src/main/java/com/yaoyuan/jiscuss/controller/UserOtherController.java +++ b/src/main/java/com/yaoyuan/jiscuss/controller/UserOtherController.java @@ -6,7 +6,7 @@ import org.springframework.stereotype.Controller; * 其他控制器——积分/权限等 */ @Controller -public class UserOtherController { +public class UserOtherController extends BaseController { //用户积分获取 } diff --git a/src/main/java/com/yaoyuan/jiscuss/controller/UserPostController.java b/src/main/java/com/yaoyuan/jiscuss/controller/UserPostController.java index 5c842c7..73a6443 100644 --- a/src/main/java/com/yaoyuan/jiscuss/controller/UserPostController.java +++ b/src/main/java/com/yaoyuan/jiscuss/controller/UserPostController.java @@ -4,13 +4,14 @@ import java.util.Date; import java.util.Map; import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpSession; +import com.yaoyuan.jiscuss.entity.UserInfo; import org.json.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; +import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; @@ -28,7 +29,7 @@ import com.yaoyuan.jiscuss.service.ITagsService; * 主题帖子评论控制器 */ @Controller -public class UserPostController { +public class UserPostController extends BaseController { private static Logger logger = LoggerFactory.getLogger(UserPostController.class); @@ -47,13 +48,15 @@ public class UserPostController { //查看主题详情 @RequestMapping("/getdiscussionsbyid") - public String getDiscussionsById(HttpServletRequest request,Map map,@RequestParam("id") Integer id) { + public String getDiscussionsById(HttpServletRequest request, ModelMap map, @RequestParam("id") Integer id) { logger.info(">>> getDiscussionsById{}",id); Discussions discussions = discussionsService.findOne(id); - HttpSession session=request.getSession(); map.put("discussions", discussions); - map.put("username", session.getAttribute("username")); + UserInfo user = getUserInfo(request); + if(user != null){ + map.put("username", user.getUsername()); + } return "discussions"; } @@ -66,10 +69,11 @@ public class UserPostController { ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes(); HttpServletRequest request = servletRequestAttributes.getRequest(); - - HttpSession session=request.getSession(); - discussions.setLast_user_id( (Integer)session.getAttribute("userid")); - discussions.setCreate_id( (Integer)session.getAttribute("userid")); + UserInfo user = getUserInfo(request); + if(user != null){ + discussions.setLast_user_id( user.getId()); + discussions.setCreate_id( user.getId()); + } discussions.setCreate_time(new Date()); Discussions saveDiscussions = discussionsService.insert(discussions); @@ -99,11 +103,13 @@ public class UserPostController { ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes(); HttpServletRequest request = servletRequestAttributes.getRequest(); - - HttpSession session=request.getSession(); - tags.setCreate_id( (Integer)session.getAttribute("userid")); + + UserInfo user = getUserInfo(request); + if(user != null){ + tags.setCreate_id( user.getId()); + } tags.setCreate_time(new Date()); - + Tags saveTags = tagsService.insert(tags); JSONObject resultobj = new JSONObject(); diff --git a/src/main/java/com/yaoyuan/jiscuss/controller/UserSystemController.java b/src/main/java/com/yaoyuan/jiscuss/controller/UserSystemController.java index 6fb0dd2..0f932d6 100644 --- a/src/main/java/com/yaoyuan/jiscuss/controller/UserSystemController.java +++ b/src/main/java/com/yaoyuan/jiscuss/controller/UserSystemController.java @@ -2,37 +2,30 @@ package com.yaoyuan.jiscuss.controller; import com.yaoyuan.jiscuss.entity.Discussions; import com.yaoyuan.jiscuss.entity.Tags; +import com.yaoyuan.jiscuss.entity.UserInfo; import com.yaoyuan.jiscuss.entity.Users; import com.yaoyuan.jiscuss.service.IDiscussionsService; import com.yaoyuan.jiscuss.service.ITagsService; import com.yaoyuan.jiscuss.service.IUsersService; -import org.json.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; -import org.springframework.security.core.Authentication; -import org.springframework.security.core.context.SecurityContext; -import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.security.core.userdetails.User; import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.*; -import org.springframework.web.servlet.ModelAndView; +import org.springframework.ui.ModelMap; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; - import java.util.ArrayList; -import java.util.Enumeration; import java.util.List; -import java.util.Map; /** * 用户页面系统控制器 */ @Controller -public class UserSystemController { +public class UserSystemController extends BaseController { private static Logger logger = LoggerFactory.getLogger(UserSystemController.class); @@ -47,7 +40,7 @@ public class UserSystemController { //首页 @RequestMapping("/") - public String home(HttpServletRequest request,Map map) { + public String home(HttpServletRequest request, ModelMap map) { logger.info(">>> index"); List userall = usersService.getAllList(); logger.info(">>> 第一遍的全部用户:"+userall); @@ -56,26 +49,6 @@ public class UserSystemController { logger.info(">>> 第二遍的全部用户:"+useral2); String username =""; - //获得session对象 - HttpSession session = request.getSession(); - //取出session域中所有属性名 - Enumeration attributeNames = session.getAttributeNames(); - while (attributeNames.hasMoreElements()) { - System.out.println(attributeNames.nextElement()); - } - //SPRING_SECURITY_CONTEXT - Object spring_security_context = session.getAttribute("SPRING_SECURITY_CONTEXT"); - System.out.println(spring_security_context); - SecurityContext securityContext = (SecurityContext) spring_security_context; - if(securityContext!=null){ - //获得认证信息 - Authentication authentication = securityContext.getAuthentication(); - //获得用户详情 - Object principal = authentication.getPrincipal(); - User user = (User) principal; - username = user.getUsername(); - System.out.println(username); - } //分页获取主题帖子 // List allDiscussions = discussionsService.getAllList(); @@ -98,7 +71,11 @@ public class UserSystemController { map.put("allDiscussions", allDiscussions); map.put("pageDiscussions", pageNumList); map.put("allTags", allTags); - map.put("username", username); + UserInfo user = getUserInfo(request); + if(user != null){ + map.put("username", user.getUsername()); + map.put("data", "Jiscuss 用户:" + user.getUsername()); + } return "index"; } @@ -146,7 +123,7 @@ public class UserSystemController { //登录页 @GetMapping("/login") public String login(@RequestParam(value = "error", required = false) String error, - @RequestParam(value = "logout", required = false) String logout,Map map) { + @RequestParam(value = "logout", required = false) String logout,ModelMap map) { if (error != null) { map.put("msg", "您输入的用户名密码错误!"); return "login"; @@ -160,16 +137,16 @@ public class UserSystemController { } //退出 - @PostMapping(value = "/loginout") - @ResponseBody - public String logout(HttpServletRequest request, HttpServletResponse response){ - JSONObject resultobj = new JSONObject(); - HttpSession session=request.getSession(); - session.invalidate(); - resultobj.put("msg", "用户退出成功"); - resultobj.put("flag", true); - return resultobj.toString(); // - } +// @PostMapping(value = "/loginout") +// @ResponseBody +// public String logout(HttpServletRequest request, HttpServletResponse response){ +// JSONObject resultobj = new JSONObject(); +// HttpSession session=request.getSession(); +// session.invalidate(); +// resultobj.put("msg", "用户退出成功"); +// resultobj.put("flag", true); +// return resultobj.toString(); // +// } //注册 diff --git a/src/main/java/com/yaoyuan/jiscuss/entity/UserInfo.java b/src/main/java/com/yaoyuan/jiscuss/entity/UserInfo.java new file mode 100644 index 0000000..40576dc --- /dev/null +++ b/src/main/java/com/yaoyuan/jiscuss/entity/UserInfo.java @@ -0,0 +1,88 @@ +package com.yaoyuan.jiscuss.entity; + +import lombok.Data; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.userdetails.UserDetails; + +import java.util.Collection; +import java.util.Set; + +/** + * @author yaoyuan2.chu + * @Title: + * @Package com.yaoyuan.jiscuss.entity + * @Description: + * @date 2020/7/16 14:55 + */ +@Data +public class UserInfo implements UserDetails{ + + private Collection authorities; + private String password; + private String username; + private String phone; + private Integer age; + private Integer id; + private String realname; + private String email; + private String gender; + private Integer level; + private Integer flag; + + public UserInfo() { + } + + public UserInfo(Collection authorities, Integer id, String password, String username, String phone) { + this.authorities = authorities; + this.id = id; + this.password = password; + this.username = username; + this.phone = phone; + } + + @Override + public Collection getAuthorities() { + return authorities; + } + + @Override + public String getPassword() { + return password; + } + + @Override + public String getUsername() { + return username; + } + + @Override + public boolean isAccountNonExpired() { + return true; + } + + @Override + public boolean isAccountNonLocked() { + return true; + } + + @Override + public boolean isCredentialsNonExpired() { + return true; + } + + @Override + public boolean isEnabled() { + return true; + } + + @Override + public String toString() { + return "UserInfo{" + + "authorities=" + authorities + + ", password='" + password + '\'' + + ", username='" + username + '\'' + + ", id='" + id + '\'' + + '}'; + } +} + diff --git a/src/main/java/com/yaoyuan/jiscuss/service/impl/UserDetailServiceImpl.java b/src/main/java/com/yaoyuan/jiscuss/service/impl/UserDetailServiceImpl.java index 629d951..f92f1a7 100644 --- a/src/main/java/com/yaoyuan/jiscuss/service/impl/UserDetailServiceImpl.java +++ b/src/main/java/com/yaoyuan/jiscuss/service/impl/UserDetailServiceImpl.java @@ -1,5 +1,6 @@ package com.yaoyuan.jiscuss.service.impl; +import com.yaoyuan.jiscuss.entity.UserInfo; import com.yaoyuan.jiscuss.entity.Users; import com.yaoyuan.jiscuss.service.IUsersService; import org.springframework.beans.factory.annotation.Autowired; @@ -34,7 +35,7 @@ public class UserDetailServiceImpl implements UserDetailsService { private PasswordEncoder passwordEncoder; @Override - public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { + public UserInfo loadUserByUsername(String username) throws UsernameNotFoundException { // 通过用户名从数据库获取用户信息 Users userInfo = userInfoService.getByUsername(username); if (userInfo == null) { @@ -49,11 +50,13 @@ public class UserDetailServiceImpl implements UserDetailsService { // 角色必须以`ROLE_`开头,数据库中没有,则在这里加 authorities.add(new SimpleGrantedAuthority("ROLE_" + role)); - return new User( - userInfo.getUsername(), + return new UserInfo( + authorities, + userInfo.getId(), // 因为数据库是明文,所以这里需加密密码 passwordEncoder.encode(userInfo.getPassword()), - authorities + userInfo.getUsername(), + userInfo.getPhone() ); } } \ No newline at end of file diff --git a/src/main/resources/templates/myHome.ftl b/src/main/resources/templates/myHome.ftl deleted file mode 100644 index e69de29..0000000