用户信息增强和基础controller

This commit is contained in:
2020-07-16 17:35:33 +08:00
parent 8b04c70a07
commit 06c48f8606
9 changed files with 190 additions and 70 deletions
+3 -5
View File
@@ -41,13 +41,14 @@
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId> <artifactId>spring-boot-starter-websocket</artifactId>
</dependency> </dependency>
<!-- h2 -->
<dependency> <dependency>
<groupId>com.h2database</groupId> <groupId>com.h2database</groupId>
<artifactId>h2</artifactId> <artifactId>h2</artifactId>
<scope>runtime</scope> <scope>runtime</scope>
</dependency> </dependency>
<!-- https://mvnrepository.com/artifact/org.json/json -->
<!-- json -->
<dependency> <dependency>
<groupId>org.json</groupId> <groupId>org.json</groupId>
<artifactId>json</artifactId> <artifactId>json</artifactId>
@@ -74,7 +75,6 @@
<scope>compile</scope> <scope>compile</scope>
</dependency> </dependency>
<!-- 阿里系的Druid依赖包 --> <!-- 阿里系的Druid依赖包 -->
<!-- https://mvnrepository.com/artifact/com.alibaba/druid-spring-boot-starter -->
<dependency> <dependency>
<groupId>com.alibaba</groupId> <groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId> <artifactId>druid-spring-boot-starter</artifactId>
@@ -91,12 +91,10 @@
<groupId>net.sf.ehcache</groupId> <groupId>net.sf.ehcache</groupId>
<artifactId>ehcache</artifactId> <artifactId>ehcache</artifactId>
</dependency> </dependency>
</dependencies> </dependencies>
<build> <build>
<plugins> <plugins>
<plugin> <plugin>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId> <artifactId>spring-boot-maven-plugin</artifactId>
@@ -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;
}
}
@@ -6,7 +6,7 @@ import org.springframework.stereotype.Controller;
* 用户消息控制器 * 用户消息控制器
*/ */
@Controller @Controller
public class UserMsgController { public class UserMsgController extends BaseController {
//首页最新消息 //首页最新消息
} }
@@ -6,7 +6,7 @@ import org.springframework.stereotype.Controller;
* 其他控制器——积分/权限等 * 其他控制器——积分/权限等
*/ */
@Controller @Controller
public class UserOtherController { public class UserOtherController extends BaseController {
//用户积分获取 //用户积分获取
} }
@@ -4,13 +4,14 @@ import java.util.Date;
import java.util.Map; import java.util.Map;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import com.yaoyuan.jiscuss.entity.UserInfo;
import org.json.JSONObject; import org.json.JSONObject;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
@@ -28,7 +29,7 @@ import com.yaoyuan.jiscuss.service.ITagsService;
* 主题帖子评论控制器 * 主题帖子评论控制器
*/ */
@Controller @Controller
public class UserPostController { public class UserPostController extends BaseController {
private static Logger logger = LoggerFactory.getLogger(UserPostController.class); private static Logger logger = LoggerFactory.getLogger(UserPostController.class);
@@ -47,13 +48,15 @@ public class UserPostController {
//查看主题详情 //查看主题详情
@RequestMapping("/getdiscussionsbyid") @RequestMapping("/getdiscussionsbyid")
public String getDiscussionsById(HttpServletRequest request,Map<String, Object> map,@RequestParam("id") Integer id) { public String getDiscussionsById(HttpServletRequest request, ModelMap map, @RequestParam("id") Integer id) {
logger.info(">>> getDiscussionsById{}",id); logger.info(">>> getDiscussionsById{}",id);
Discussions discussions = discussionsService.findOne(id); Discussions discussions = discussionsService.findOne(id);
HttpSession session=request.getSession();
map.put("discussions", discussions); map.put("discussions", discussions);
map.put("username", session.getAttribute("username")); UserInfo user = getUserInfo(request);
if(user != null){
map.put("username", user.getUsername());
}
return "discussions"; return "discussions";
} }
@@ -66,10 +69,11 @@ public class UserPostController {
ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes(); ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes();
HttpServletRequest request = servletRequestAttributes.getRequest(); HttpServletRequest request = servletRequestAttributes.getRequest();
UserInfo user = getUserInfo(request);
HttpSession session=request.getSession(); if(user != null){
discussions.setLast_user_id( (Integer)session.getAttribute("userid")); discussions.setLast_user_id( user.getId());
discussions.setCreate_id( (Integer)session.getAttribute("userid")); discussions.setCreate_id( user.getId());
}
discussions.setCreate_time(new Date()); discussions.setCreate_time(new Date());
Discussions saveDiscussions = discussionsService.insert(discussions); Discussions saveDiscussions = discussionsService.insert(discussions);
@@ -99,11 +103,13 @@ public class UserPostController {
ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes(); ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes();
HttpServletRequest request = servletRequestAttributes.getRequest(); HttpServletRequest request = servletRequestAttributes.getRequest();
HttpSession session=request.getSession(); UserInfo user = getUserInfo(request);
tags.setCreate_id( (Integer)session.getAttribute("userid")); if(user != null){
tags.setCreate_id( user.getId());
}
tags.setCreate_time(new Date()); tags.setCreate_time(new Date());
Tags saveTags = tagsService.insert(tags); Tags saveTags = tagsService.insert(tags);
JSONObject resultobj = new JSONObject(); JSONObject resultobj = new JSONObject();
@@ -2,37 +2,30 @@ package com.yaoyuan.jiscuss.controller;
import com.yaoyuan.jiscuss.entity.Discussions; import com.yaoyuan.jiscuss.entity.Discussions;
import com.yaoyuan.jiscuss.entity.Tags; import com.yaoyuan.jiscuss.entity.Tags;
import com.yaoyuan.jiscuss.entity.UserInfo;
import com.yaoyuan.jiscuss.entity.Users; import com.yaoyuan.jiscuss.entity.Users;
import com.yaoyuan.jiscuss.service.IDiscussionsService; import com.yaoyuan.jiscuss.service.IDiscussionsService;
import com.yaoyuan.jiscuss.service.ITagsService; import com.yaoyuan.jiscuss.service.ITagsService;
import com.yaoyuan.jiscuss.service.IUsersService; import com.yaoyuan.jiscuss.service.IUsersService;
import org.json.JSONObject;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page; 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.stereotype.Controller;
import org.springframework.web.bind.annotation.*; import org.springframework.ui.ModelMap;
import org.springframework.web.servlet.ModelAndView; 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.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* 用户页面系统控制器 * 用户页面系统控制器
*/ */
@Controller @Controller
public class UserSystemController { public class UserSystemController extends BaseController {
private static Logger logger = LoggerFactory.getLogger(UserSystemController.class); private static Logger logger = LoggerFactory.getLogger(UserSystemController.class);
@@ -47,7 +40,7 @@ public class UserSystemController {
//首页 //首页
@RequestMapping("/") @RequestMapping("/")
public String home(HttpServletRequest request,Map<String, Object> map) { public String home(HttpServletRequest request, ModelMap map) {
logger.info(">>> index"); logger.info(">>> index");
List<Users> userall = usersService.getAllList(); List<Users> userall = usersService.getAllList();
logger.info(">>> 第一遍的全部用户:"+userall); logger.info(">>> 第一遍的全部用户:"+userall);
@@ -56,26 +49,6 @@ public class UserSystemController {
logger.info(">>> 第二遍的全部用户:"+useral2); logger.info(">>> 第二遍的全部用户:"+useral2);
String username =""; 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<Discussions> allDiscussions = discussionsService.getAllList(); // List<Discussions> allDiscussions = discussionsService.getAllList();
@@ -98,7 +71,11 @@ public class UserSystemController {
map.put("allDiscussions", allDiscussions); map.put("allDiscussions", allDiscussions);
map.put("pageDiscussions", pageNumList); map.put("pageDiscussions", pageNumList);
map.put("allTags", allTags); 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"; return "index";
} }
@@ -146,7 +123,7 @@ public class UserSystemController {
//登录页 //登录页
@GetMapping("/login") @GetMapping("/login")
public String login(@RequestParam(value = "error", required = false) String error, public String login(@RequestParam(value = "error", required = false) String error,
@RequestParam(value = "logout", required = false) String logout,Map<String, Object> map) { @RequestParam(value = "logout", required = false) String logout,ModelMap map) {
if (error != null) { if (error != null) {
map.put("msg", "您输入的用户名密码错误!"); map.put("msg", "您输入的用户名密码错误!");
return "login"; return "login";
@@ -160,16 +137,16 @@ public class UserSystemController {
} }
//退出 //退出
@PostMapping(value = "/loginout") // @PostMapping(value = "/loginout")
@ResponseBody // @ResponseBody
public String logout(HttpServletRequest request, HttpServletResponse response){ // public String logout(HttpServletRequest request, HttpServletResponse response){
JSONObject resultobj = new JSONObject(); // JSONObject resultobj = new JSONObject();
HttpSession session=request.getSession(); // HttpSession session=request.getSession();
session.invalidate(); // session.invalidate();
resultobj.put("msg", "用户退出成功"); // resultobj.put("msg", "用户退出成功");
resultobj.put("flag", true); // resultobj.put("flag", true);
return resultobj.toString(); // // return resultobj.toString(); //
} // }
//注册 //注册
@@ -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<GrantedAuthority> 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<GrantedAuthority> 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<? extends GrantedAuthority> 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 + '\'' +
'}';
}
}
@@ -1,5 +1,6 @@
package com.yaoyuan.jiscuss.service.impl; package com.yaoyuan.jiscuss.service.impl;
import com.yaoyuan.jiscuss.entity.UserInfo;
import com.yaoyuan.jiscuss.entity.Users; import com.yaoyuan.jiscuss.entity.Users;
import com.yaoyuan.jiscuss.service.IUsersService; import com.yaoyuan.jiscuss.service.IUsersService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@@ -34,7 +35,7 @@ public class UserDetailServiceImpl implements UserDetailsService {
private PasswordEncoder passwordEncoder; private PasswordEncoder passwordEncoder;
@Override @Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { public UserInfo loadUserByUsername(String username) throws UsernameNotFoundException {
// 通过用户名从数据库获取用户信息 // 通过用户名从数据库获取用户信息
Users userInfo = userInfoService.getByUsername(username); Users userInfo = userInfoService.getByUsername(username);
if (userInfo == null) { if (userInfo == null) {
@@ -49,11 +50,13 @@ public class UserDetailServiceImpl implements UserDetailsService {
// 角色必须以`ROLE_`开头,数据库中没有,则在这里加 // 角色必须以`ROLE_`开头,数据库中没有,则在这里加
authorities.add(new SimpleGrantedAuthority("ROLE_" + role)); authorities.add(new SimpleGrantedAuthority("ROLE_" + role));
return new User( return new UserInfo(
userInfo.getUsername(), authorities,
userInfo.getId(),
// 因为数据库是明文,所以这里需加密密码 // 因为数据库是明文,所以这里需加密密码
passwordEncoder.encode(userInfo.getPassword()), passwordEncoder.encode(userInfo.getPassword()),
authorities userInfo.getUsername(),
userInfo.getPhone()
); );
} }
} }