diff --git a/README.md b/README.md index 243ae54f63955f97c7c3ab0be347f5b5a3c253d0..1173b25da295bcccc1920d6de0c773fa24a22383 100644 --- a/README.md +++ b/README.md @@ -12,3 +12,15 @@ spring初始化时候的动作 5、在监听的类中会有一个contextInitialized(ServletContextEvent event)初始化方法,在这个方法中可以通过event.getServletContext().getInitParameter("contextConfigLocation") 来得到context-param 设定的值。在这个类中还必须有一个contextDestroyed(ServletContextEvent event) 销毁方法.用于关闭应用前释放资源,比如说数据库连接的关闭。 得到这个context-param的值之后,你就可以做一些操作了.注意,这个时候你的WEB项目还没有完全启动完成.这个动作会比所有的Servlet都要早。 +2018/8/24 + 1、遇见一个奇怪的问题 controller里面如果接口没有配置respnseBody这个注解的话 那么下发的请求地址将于实际的不一致, + 造成访问404的问题出现 + 2、springMvc支持PUT参数的解决方案 + + HttpMethodFilter + org.springframework.web.filter.HttpPutFormContentFilter + + + HttpMethodFilter + /* + diff --git a/src/main/java/com/mmall/common/CheckAuth.java b/src/main/java/com/mmall/common/CheckAuth.java new file mode 100644 index 0000000000000000000000000000000000000000..b008ad7ad83be8dff3e335333727150a9f4d1a1b --- /dev/null +++ b/src/main/java/com/mmall/common/CheckAuth.java @@ -0,0 +1,18 @@ +package com.mmall.common; + +import com.mmall.pojo.User; + +import javax.servlet.http.HttpSession; + +/** + * Created by Administrator on 2018/8/22 0022. + */ +public class CheckAuth { + public static ServerResponse isLogin(HttpSession session) { + User user = (User) session.getAttribute(Const.CURRENT_USER); + if (user == null) { + return ServerResponse.createByErrorCodeMessage(ResponseCode.NEED_LOGIN.getCode(), "用户未登录"); + } + return ServerResponse.createBySuccess(user); + } +} diff --git a/src/main/java/com/mmall/controller/portal/backend/CategoryManageController.java b/src/main/java/com/mmall/controller/portal/backend/CategoryManageController.java new file mode 100644 index 0000000000000000000000000000000000000000..823cf26623200559c30caec3810ce6fd9fc00155 --- /dev/null +++ b/src/main/java/com/mmall/controller/portal/backend/CategoryManageController.java @@ -0,0 +1,90 @@ +package com.mmall.controller.portal.backend; + +import com.mmall.common.CheckAuth; +import com.mmall.common.ServerResponse; +import com.mmall.pojo.Category; +import com.mmall.pojo.User; +import com.mmall.service.ICategoryService; +import com.mmall.service.IUserService; +import org.springframework.beans.factory.annotation.Autowired; +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.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.servlet.http.HttpSession; +import java.util.List; + +/** + * Created by Administrator on 2018/8/21 0021. + */ +@Controller +@RequestMapping("/manage/category/") +public class CategoryManageController { + @Autowired + private IUserService iUserService; + + @Autowired + private ICategoryService iCategoryService; + + @RequestMapping(value = "add_category.do", method = RequestMethod.POST) + @ResponseBody + public ServerResponse addCategory(HttpSession session, String categoryName, @RequestParam(value = "parentId", defaultValue = "0") int parentId) { + ServerResponse loginFlag = CheckAuth.isLogin(session); + if(!loginFlag.isSuccess()){ + return loginFlag; + } + + //校验一下是否是管理员 + ServerResponse checkResult = iUserService.checkAdminRole((User)loginFlag.getData()); + if (checkResult.isSuccess()) { + return iCategoryService.addCategory(categoryName, parentId); + } + return ServerResponse.createByErrorMessage("无权限操作,需要管理员权限"); + } + + @RequestMapping(value = "set_category_name.do", method = RequestMethod.PUT) + @ResponseBody + public ServerResponse setCategoryNameById(HttpSession session, String categoryName, @RequestParam(value = "categoryId",defaultValue = "0") int categoryId) { + ServerResponse loginFlag = CheckAuth.isLogin(session); + if(!loginFlag.isSuccess()){ + return loginFlag; + } + //校验一下是否是管理员 + ServerResponse checkResult = iUserService.checkAdminRole((User)loginFlag.getData()); + if (checkResult.isSuccess()) { + return iCategoryService.setCategoryNameById(categoryName, categoryId); + } + return ServerResponse.createByErrorMessage("无权限操作,需要管理员权限"); + } + + @RequestMapping(value = "get_category.do", method = RequestMethod.GET) + @ResponseBody + public ServerResponse> getCategoryByParentId(HttpSession session, @RequestParam(value = "categoryId" ,defaultValue = "0") int categoryId) { + ServerResponse loginFlag = CheckAuth.isLogin(session); + if(!loginFlag.isSuccess()){ + return loginFlag; + } + ServerResponse checkResult = iUserService.checkAdminRole((User)loginFlag.getData()); + if (checkResult.isSuccess()) { + return iCategoryService.getCategoryByParentId(categoryId); + } + return ServerResponse.createByErrorMessage("无权限操作,需要管理员权限"); + } + + @RequestMapping(value = "get_deep_category.do", method = RequestMethod.GET) + @ResponseBody + public ServerResponse getCategoryAndDeepChildrenCategory(HttpSession session, @RequestParam(value = "categoryId", defaultValue = "0") Integer categoryId) { + ServerResponse loginFlag = CheckAuth.isLogin(session); + if(!loginFlag.isSuccess()){ + return loginFlag; + } + ServerResponse checkResult = iUserService.checkAdminRole((User)loginFlag.getData()); + if (checkResult.isSuccess()) { + return iCategoryService.selectCategoryAndChildrenById(categoryId); + } + return ServerResponse.createByErrorMessage("无权限操作,需要管理员权限"); + } + +} diff --git a/src/main/java/com/mmall/dao/CategoryMapper.java b/src/main/java/com/mmall/dao/CategoryMapper.java index b69921a18c5350d7a6a8c5c695eb6c66c626eb93..e7380a3a643686cc4fa0b8648575350dc31fbcf0 100644 --- a/src/main/java/com/mmall/dao/CategoryMapper.java +++ b/src/main/java/com/mmall/dao/CategoryMapper.java @@ -1,6 +1,9 @@ package com.mmall.dao; import com.mmall.pojo.Category; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface CategoryMapper { int deleteByPrimaryKey(Integer id); @@ -14,4 +17,6 @@ public interface CategoryMapper { int updateByPrimaryKeySelective(Category record); int updateByPrimaryKey(Category record); + + List getCategoryByParentId(@Param("parentId") int parentId); } \ No newline at end of file diff --git a/src/main/java/com/mmall/pojo/Category.java b/src/main/java/com/mmall/pojo/Category.java index 2b636da3cc9ea75416676ccdb9e0d5b3b94f9a3e..5924d992a2a47aed3393c01f0061d64daf8b44eb 100644 --- a/src/main/java/com/mmall/pojo/Category.java +++ b/src/main/java/com/mmall/pojo/Category.java @@ -17,6 +17,11 @@ public class Category { private Date updateTime; + public Category(Integer id, String name) { + this.id = id; + this.name = name; + } + public Category(Integer id, Integer parentId, String name, Boolean status, Integer sortOrder, Date createTime, Date updateTime) { this.id = id; this.parentId = parentId; diff --git a/src/main/java/com/mmall/pojo/User.java b/src/main/java/com/mmall/pojo/User.java index df77265f930930cc1fb130b2762dc2f07e0ab6c2..dbfdf7b5886d80c6e7d52b624ee821e496750fca 100644 --- a/src/main/java/com/mmall/pojo/User.java +++ b/src/main/java/com/mmall/pojo/User.java @@ -36,6 +36,8 @@ public class User { this.updateTime = updateTime; } + + public User() { super(); } diff --git a/src/main/java/com/mmall/service/ICategoryService.java b/src/main/java/com/mmall/service/ICategoryService.java new file mode 100644 index 0000000000000000000000000000000000000000..34e48ea688fea6d646e15015c862aedfd07a9969 --- /dev/null +++ b/src/main/java/com/mmall/service/ICategoryService.java @@ -0,0 +1,21 @@ +package com.mmall.service; + +import com.mmall.common.ServerResponse; +import com.mmall.pojo.Category; + +import java.util.List; + +/** + * Created by Administrator on 2018/8/21 0021. + */ +public interface ICategoryService { + ServerResponse addCategory(String categoryname, Integer parentId); + + ServerResponse setCategoryNameById(String categoryName, Integer categoryId); + + ServerResponse getCategoryByParentId(Integer categoryId); + + ServerResponse> selectCategoryAndChildrenById(Integer categoryId); + + +} diff --git a/src/main/java/com/mmall/service/IUserService.java b/src/main/java/com/mmall/service/IUserService.java index 8d7be56fd3d0af32e4def2c9742f9ec0675e6f63..41c024038cbc0de82296c7377576c32f2beace2e 100644 --- a/src/main/java/com/mmall/service/IUserService.java +++ b/src/main/java/com/mmall/service/IUserService.java @@ -27,4 +27,6 @@ public interface IUserService { ServerResponse updateInformation(User user); ServerResponse getInformation(Integer userId); + + ServerResponse checkAdminRole(User user); } diff --git a/src/main/java/com/mmall/service/impl/CategoryServiceImpl.java b/src/main/java/com/mmall/service/impl/CategoryServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..7b4dff2749800461675da13f5631836e7318a76b --- /dev/null +++ b/src/main/java/com/mmall/service/impl/CategoryServiceImpl.java @@ -0,0 +1,110 @@ +package com.mmall.service.impl; + +import com.google.common.collect.Lists; +import com.google.common.collect.Sets; +import com.mmall.common.ServerResponse; +import com.mmall.dao.CategoryMapper; +import com.mmall.pojo.Category; +import com.mmall.service.ICategoryService; +import com.mmall.util.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import java.util.Collection; +import java.util.List; +import java.util.Set; + +/** + * Created by Administrator on 2018/8/21 0021. + */ +@Service("iCategoryService") +public class CategoryServiceImpl implements ICategoryService { + private static Logger logger = LoggerFactory.getLogger(CategoryServiceImpl.class); + private static Integer ZERO = 0; + + + @Autowired + private CategoryMapper categoryMapper; + + @Override + public ServerResponse addCategory(String categoryname, Integer parentId) { + logger.info("function=addCategory add categoryname={}", categoryname); + if (StringUtils.isEmpty(categoryname)||StringUtils.checkId(parentId)) { + return ServerResponse.createByErrorMessage("添加品类参数错误"); + } + Category category = new Category(); + category.setName(categoryname); + category.setParentId(parentId); + //true为可用 false为不可用 + category.setStatus(true); + int rowResult = categoryMapper.insert(category); + if (rowResult > ZERO) { + return ServerResponse.createBySuccessMessage("添加品类成功"); + } + return ServerResponse.createByErrorMessage("添加品类失败"); + } + + @Override + public ServerResponse setCategoryNameById(String categoryName, Integer categoryId) { + logger.info("function=setCategoryNameById categoryId={}", categoryId); + if (StringUtils.isEmpty(categoryName) || StringUtils.checkId(categoryId)) { + return ServerResponse.createByErrorMessage("添加品类参数错误"); + } + Category category = new Category(categoryId, categoryName); + + int resultCount = categoryMapper.updateByPrimaryKeySelective(category); + if (resultCount > ZERO) { + return ServerResponse.createBySuccessMessage("修改品类名称成功"); + } + return ServerResponse.createByErrorMessage("修改品类名称失败"); + } + + /** + * 获取该父类节点下的所有子节点的品类信息(不递归) + * @param categoryId(parentid) + * @return + */ + @Override + public ServerResponse> getCategoryByParentId(Integer categoryId) { + logger.info("function=getCategoryByParentId categoryId={}", categoryId); + if(StringUtils.checkId(categoryId)) + { + return ServerResponse.createByErrorMessage("添加品类参数错误"); + } + List categoryList = categoryMapper.getCategoryByParentId(categoryId); + if(CollectionUtils.isEmpty(categoryList)){ + logger.info("function=getCategoryById fing not category parentId={}", categoryId); + } + return ServerResponse.createBySuccess(categoryList); + } + + @Override + public ServerResponse> selectCategoryAndChildrenById(Integer categoryId) { + Set categorySet = Sets.newHashSet(); + findChildCategory(categorySet, categoryId); + List categoryIdList = Lists.newArrayList(); + if (categoryId != null) { + for (Category categoryItem : categorySet) { + categoryIdList.add(categoryItem); + } + } + return ServerResponse.createBySuccess(categoryIdList); + } + + //递归算法,算出子节点 + private Set findChildCategory(Set categorySet, Integer categoryId) { + Category category = categoryMapper.selectByPrimaryKey(categoryId); + if (category != null) { + categorySet.add(category); + } + //查找子节点,递归算法一定要有一个退出的条件 + List categoryList = categoryMapper.getCategoryByParentId(categoryId); + for (Category categoryItem : categoryList) { + findChildCategory(categorySet, categoryItem.getId()); + } + return categorySet; + } +} diff --git a/src/main/java/com/mmall/service/impl/UserServiceImpl.java b/src/main/java/com/mmall/service/impl/UserServiceImpl.java index 7ff2210c0a1c9ec7df9c207a56707f2930c7a628..42188c096a25a09bbb587d688c79f3bd8d05a9d7 100644 --- a/src/main/java/com/mmall/service/impl/UserServiceImpl.java +++ b/src/main/java/com/mmall/service/impl/UserServiceImpl.java @@ -186,4 +186,17 @@ public class UserServiceImpl implements IUserService { user.setPassword(org.apache.commons.lang3.StringUtils.EMPTY); return ServerResponse.createBySuccess(user); } + + /** + * 校验用户是否是管理员 + * @param user + * @return + */ + @Override + public ServerResponse checkAdminRole(User user) { + if (user != null && user.getRole() == Const.Role.ROLE_ADMIN) { + return ServerResponse.createBySuccess(); + } + return ServerResponse.createByError(); + } } diff --git a/src/main/java/com/mmall/util/StringUtils.java b/src/main/java/com/mmall/util/StringUtils.java index c3b5ed08cd98a8f7097dd1de4df65f94b8b48da4..daf960730f54ef37d690ea5aca48d0df7679b8eb 100644 --- a/src/main/java/com/mmall/util/StringUtils.java +++ b/src/main/java/com/mmall/util/StringUtils.java @@ -17,4 +17,16 @@ public class StringUtils { } return false; } + + /** + * j校验id是否为空 + * @param str + * @return + */ + public static boolean checkId(Integer id) { + if (id == null) { + return true; + } + return false; + } } diff --git a/src/main/resources/mappers/CategoryMapper.xml b/src/main/resources/mappers/CategoryMapper.xml index 7b2718e107821921ad922ca9c33357a85fe123b0..4d8d3c4c0a044b40a1c302f6e4085b18df50a8e6 100644 --- a/src/main/resources/mappers/CategoryMapper.xml +++ b/src/main/resources/mappers/CategoryMapper.xml @@ -100,7 +100,7 @@ create_time = #{createTime,jdbcType=TIMESTAMP}, - + update_time = now(), @@ -116,4 +116,10 @@ update_time = now() where id = #{id,jdbcType=INTEGER} + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml index 2ae4bf83d1fb1eac25300193c46ae643923b2c05..715bf9d4a5ebde1b344e932ddf73d31af5c5d62a 100644 --- a/src/main/webapp/WEB-INF/web.xml +++ b/src/main/webapp/WEB-INF/web.xml @@ -23,6 +23,16 @@ /* + + + HttpMethodFilter + org.springframework.web.filter.HttpPutFormContentFilter + + + HttpMethodFilter + /* + + org.springframework.web.context.request.RequestContextListener