源码获取:俺的博客首页 "资源" 里下载!
项目介绍
本项目分为前后台,前台为普通用户角色,后台为管理员角色;
管理员角色包含以下功能:
管理员登录,管理员信息管理,查看用户信息,新闻公告管理,类型管理,管理城市信息,救助中心信息管理,流浪动物信息管理,查看收养信息,查看评价信息,修改密码等功能。
用户角色包含以下功能:
查看首页,查看网站公告,用户登录,查看推荐,查看动物详情,查看领养计划,提交订单,查看我的订单,修改个人信息,修改密码等功能。
环境需要
1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。
2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA;
3.tomcat环境:Tomcat 7.x,8.x,9.x版本均可
4.硬件环境:windows 7/8/10 1G内存以上;或者 Mac OS;
5.是否Maven项目: 否;查看源码目录中是否包含pom.xml;若包含,则为maven项目,否则为非maven项目
6.数据库:MySql 5.7/8.0等版本均可;
技术栈
1. 后端:Spring+springmvc+mybatis
2. 前端:JSP+css+javascript+jQuery
使用说明
1. 使用Navicat或者其它工具,在mysql中创建对应sql文件名称的数据库,并导入项目的sql文件;
2.使用IDEA/Eclipse/MyEclipse导入项目,Eclipse/MyEclipse导入时,若为maven项目请选择maven;
若为maven项目,导入成功后请执行maven clean;maven install命令,配置tomcat
3. 将项目中springmvc-servlet.xml配置文件中的数据库配置改为自己的配置;
4. 运行项目,在浏览器中输入http://localhost:8080/ 登录
用户账号/密码: user/123456
管理员账号/密码:admin/admin
![](https://img-blog.csdnimg.cn/img_convert/f32c777cbfc13e0467cd8140b126e14b.jpeg)
![](https://img-blog.csdnimg.cn/img_convert/134da94d8a2c288249882cbd365bb87c.jpeg)
![](https://img-blog.csdnimg.cn/img_convert/2ea56d7dd18c156125a6a45cc18eac3f.jpeg)
![](https://img-blog.csdnimg.cn/img_convert/f63a4ba5212cce86182c66d3b7006f4b.jpeg)
![](https://img-blog.csdnimg.cn/img_convert/70d94c98fae62de68d666cbaf4ff3fb4.jpeg)
![](https://img-blog.csdnimg.cn/img_convert/f24ab50c4618a6d1fc4b4f446853121c.jpeg)
登录管理控制层:
java">java">/**
* 登录验证
*/
@Controller
public class LoginController extends BaseController
{
@Autowired
public RoleServiceImpl roleService;
@Autowired
public UserServiceImpl userService;
@GetMapping("/login")
public String login(HttpServletRequest request, HttpServletResponse response)
{
// 如果是Ajax请求,返回Json字符串。
if (ServletUtils.isAjaxRequest(request))
{
return ServletUtils.renderString(response, "{\"code\":\"1\",\"msg\":\"未登录或登录超时。请重新登录\"}");
}
return "login";
}
@PostMapping("/login")
@ResponseBody
public AjaxResult ajaxLogin(String username, String password, Boolean rememberMe)
{
UsernamePasswordToken token = new UsernamePasswordToken(username, password, rememberMe);
Subject subject = SecurityUtils.getSubject();
try
{
subject.login(token);
return success();
}
catch (AuthenticationException e)
{
String msg = "用户或密码错误";
if (StringUtils.isNotEmpty(e.getMessage()))
{
msg = e.getMessage();
}
return error(msg);
}
}
@GetMapping("/regist")
public String regist(ModelMap mmap){
System.out.println("用户注册");
mmap.put("roles", roleService.selectGeneralRole());
return "regist";
}
@PostMapping("/regist")
@ResponseBody
public AjaxResult ajaxRegist(User user)
{
return toAjax(userService.registUser(user));
}
@GetMapping("/forget")
public String forget(ModelMap mmap){
return "/forget";
}
@Log(title = "忘记密码", businessType = BusinessType.UPDATE)
@PostMapping("/forget")
@ResponseBody
public AjaxResult forget(User user)
{
if(StringUtils.isEmpty(user.getLoginName()) || StringUtils.isEmpty(user.getEmail())){
return error("请输入用户名和邮箱!");
}
List<User> userList = userService.selectUserList(user);
if(userList == null || userList.size() == 0){
return error("输入的用户名/邮箱不匹配!");
}else{
user.setUserId(userList.get(0).getUserId());
user.setPassword("123456");
userService.resetUserPwd(user);
return success();
}
}
@GetMapping("/unauth")
public String unauth()
{
return "error/unauth";
}
}
用户管理控制层:
java">java">/**
* 用户信息
*/
@Controller
@RequestMapping("/system/user")
public class UserController extends BaseController
{
private String prefix = "system/user";
@Autowired
private IUserService userService;
@Autowired
private IRoleService roleService;
@Autowired
private IPostService postService;
@RequiresPermissions("system:user:view")
@GetMapping()
public String user()
{
return prefix + "/user";
}
@RequiresPermissions("system:user:list")
@PostMapping("/list")
@ResponseBody
public TableDataInfo list(User user)
{
startPage();
List<User> list = userService.selectUserList(user);
return getDataTable(list);
}
@Log(title = "用户管理", businessType = BusinessType.EXPORT)
@RequiresPermissions("system:user:export")
@PostMapping("/export")
@ResponseBody
public AjaxResult export(User user)
{
List<User> list = userService.selectUserList(user);
ExcelUtil<User> util = new ExcelUtil<User>(User.class);
return util.exportExcel(list, "用户数据");
}
@Log(title = "用户管理", businessType = BusinessType.IMPORT)
@RequiresPermissions("system:user:import")
@PostMapping("/importData")
@ResponseBody
public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception
{
ExcelUtil<User> util = new ExcelUtil<User>(User.class);
List<User> userList = util.importExcel(file.getInputStream());
String message = userService.importUser(userList, updateSupport);
return AjaxResult.success(message);
}
@RequiresPermissions("system:user:view")
@GetMapping("/importTemplate")
@ResponseBody
public AjaxResult importTemplate()
{
ExcelUtil<User> util = new ExcelUtil<User>(User.class);
return util.importTemplateExcel("用户数据");
}
/**
* 新增用户
*/
@GetMapping("/add")
public String add(ModelMap mmap)
{
mmap.put("roles", roleService.selectRoleAll());
mmap.put("posts", postService.selectPostAll());
return prefix + "/add";
}
/**
* 新增保存用户
*/
@RequiresPermissions("system:user:add")
@Log(title = "用户管理", businessType = BusinessType.INSERT)
@PostMapping("/add")
@ResponseBody
public AjaxResult addSave(@Validated User user)
{
if (UserConstants.USER_NAME_NOT_UNIQUE.equals(userService.checkLoginNameUnique(user.getLoginName())))
{
return error("新增用户'" + user.getLoginName() + "'失败,登录账号已存在");
}
else if (UserConstants.USER_PHONE_NOT_UNIQUE.equals(userService.checkPhoneUnique(user)))
{
return error("新增用户'" + user.getLoginName() + "'失败,手机号码已存在");
}
else if (UserConstants.USER_EMAIL_NOT_UNIQUE.equals(userService.checkEmailUnique(user)))
{
return error("新增用户'" + user.getLoginName() + "'失败,邮箱账号已存在");
}
return toAjax(userService.insertUser(user));
}
/**
* 修改用户
*/
@GetMapping("/edit/{userId}")
public String edit(@PathVariable("userId") Long userId, ModelMap mmap)
{
mmap.put("user", userService.selectUserById(userId));
mmap.put("roles", roleService.selectRolesByUserId(userId));
mmap.put("posts", postService.selectPostsByUserId(userId));
return prefix + "/edit";
}
/**
* 修改保存用户
*/
@RequiresPermissions("system:user:edit")
@Log(title = "用户管理", businessType = BusinessType.UPDATE)
@PostMapping("/edit")
@ResponseBody
public AjaxResult editSave(@Validated User user)
{
userService.checkUserAllowed(user);
if (UserConstants.USER_PHONE_NOT_UNIQUE.equals(userService.checkPhoneUnique(user)))
{
return error("修改用户'" + user.getLoginName() + "'失败,手机号码已存在");
}
else if (UserConstants.USER_EMAIL_NOT_UNIQUE.equals(userService.checkEmailUnique(user)))
{
return error("修改用户'" + user.getLoginName() + "'失败,邮箱账号已存在");
}
return toAjax(userService.updateUser(user));
}
@RequiresPermissions("system:user:resetPwd")
@Log(title = "重置密码", businessType = BusinessType.UPDATE)
@GetMapping("/resetPwd/{userId}")
public String resetPwd(@PathVariable("userId") Long userId, ModelMap mmap)
{
mmap.put("user", userService.selectUserById(userId));
return prefix + "/resetPwd";
}
@RequiresPermissions("system:user:resetPwd")
@Log(title = "重置密码", businessType = BusinessType.UPDATE)
@PostMapping("/resetPwd")
@ResponseBody
public AjaxResult resetPwdSave(User user)
{
userService.checkUserAllowed(user);
if (userService.resetUserPwd(user) > 0)
{
if (ShiroUtils.getUserId() == user.getUserId())
{
setSysUser(userService.selectUserById(user.getUserId()));
}
return success();
}
return error();
}
@RequiresPermissions("system:user:remove")
@Log(title = "用户管理", businessType = BusinessType.DELETE)
@PostMapping("/remove")
@ResponseBody
public AjaxResult remove(String ids)
{
try
{
return toAjax(userService.deleteUserByIds(ids));
}
catch (Exception e)
{
return error(e.getMessage());
}
}
/**
* 校验用户名
*/
@PostMapping("/checkLoginNameUnique")
@ResponseBody
public String checkLoginNameUnique(User user)
{
return userService.checkLoginNameUnique(user.getLoginName());
}
/**
* 校验手机号码
*/
@PostMapping("/checkPhoneUnique")
@ResponseBody
public String checkPhoneUnique(User user)
{
return userService.checkPhoneUnique(user);
}
/**
* 校验email邮箱
*/
@PostMapping("/checkEmailUnique")
@ResponseBody
public String checkEmailUnique(User user)
{
return userService.checkEmailUnique(user);
}
/**
* 用户状态修改
*/
@Log(title = "用户管理", businessType = BusinessType.UPDATE)
@RequiresPermissions("system:user:edit")
@PostMapping("/changeStatus")
@ResponseBody
public AjaxResult changeStatus(User user)
{
userService.checkUserAllowed(user);
return toAjax(userService.changeStatus(user));
}
}
购物车管理控制层:
java">java">/**
* 购物车Controller
*
*/
@Controller
@RequestMapping("/system/cart")
public class CartController extends BaseController
{
private String prefix = "system/cart";
@Autowired
private ICartService cartService;
@RequiresPermissions("system:cart:view")
@GetMapping()
public String cart()
{
return prefix + "/cart";
}
/**
* 查询购物车列表
*/
@RequiresPermissions("system:cart:list")
@PostMapping("/list")
@ResponseBody
public TableDataInfo list(Cart cart)
{
Long userId = ShiroUtils.getSysUser().getUserId();
cart.setUserId(userId);
startPage();
List<Cart> list = cartService.selectCartList(cart);
return getDataTable(list);
}
/**
* 导出购物车列表
*/
@RequiresPermissions("system:cart:export")
@Log(title = "购物车", businessType = BusinessType.EXPORT)
@PostMapping("/export")
@ResponseBody
public AjaxResult export(Cart cart)
{
List<Cart> list = cartService.selectCartList(cart);
ExcelUtil<Cart> util = new ExcelUtil<Cart>(Cart.class);
return util.exportExcel(list, "cart");
}
/**
* 新增购物车
*/
@GetMapping("/add")
public String add()
{
return prefix + "/add";
}
/**
* 新增保存购物车
*/
@RequiresPermissions("system:cart:add")
@Log(title = "购物车", businessType = BusinessType.INSERT)
@PostMapping("/add")
@ResponseBody
public AjaxResult addSave(Cart cart)
{
return toAjax(cartService.insertCart(cart));
}
/**
* 新增保存购物车
*/
@Log(title = "购物车", businessType = BusinessType.INSERT)
@GetMapping("/addcart/{productId}")
@ResponseBody
public AjaxResult addcart(@PathVariable("productId") Long productId,Cart cart)
{
Long userId = ShiroUtils.getSysUser().getUserId();
cart.setProductId(productId);
cart.setUserId(userId);
cartService.insertCart(cart);
return AjaxResult.success("加入购物车成功!");
}
/**
* 修改购物车
*/
@GetMapping("/edit/{cartId}")
public String edit(@PathVariable("cartId") Long cartId, ModelMap mmap)
{
Cart cart = cartService.selectCartById(cartId);
mmap.put("cart", cart);
return prefix + "/edit";
}
/**
* 修改保存购物车
*/
@RequiresPermissions("system:cart:edit")
@Log(title = "购物车", businessType = BusinessType.UPDATE)
@PostMapping("/edit")
@ResponseBody
public AjaxResult editSave(Cart cart)
{
return toAjax(cartService.updateCart(cart));
}
/**
* 删除购物车
*/
@RequiresPermissions("system:cart:remove")
@Log(title = "购物车", businessType = BusinessType.DELETE)
@PostMapping( "/remove")
@ResponseBody
public AjaxResult remove(String ids)
{
return toAjax(cartService.deleteCartByIds(ids));
}
}