从b站学习springcloud项目,现在进行总结,该总结除去了视频中出现的小错误,对有些易错的地方进行了提醒
b站链接:https://www.bilibili.com/video/av55629580?p=1
资料链接:
https://pan.baidu.com/s/1o0Aju3IydKA15Vo1pP4z5w
提取码: 21ru
上一节链接:
https://blog.csdn.net/qq_40893824/article/details/103643682
下一节链接:
https://blog.csdn.net/qq_40893824/article/details/103647148
下面的内容总结:
实现细节:
直接进入 http://localhost:8030/index.html :
因为没有用户登录,所以无法显示,我想在用户直接进入http://localhost:8030/index.html 时可以跳转至用户登录的页面:
1.创建一个过滤器,在client/southwind中创包filter,新建UserFilter.java,
可以直接继承Filter,但是选择的时候选择下图中的Filter:
再加上
@Component
@WebFilter(urlPatterns = {"/index.html"}, filterName = "userFilter")/*filterName = "userFilter" 防止重对象次数过多*/
对于doFilter部分,注意修改参数列表!代码:
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
HttpSession session = request.getSession();
User user = (User) session.getAttribute("user");
if (user ==null){
response.sendRedirect("login.html");
}else{
filterChain.doFilter(servletRequest,servletResponse);
}
}
2.在client/ClientApplication中加注解@ServletComponentScan//这样过滤器(拦截器)才会生效
3.测试 进入 http://localhost:8030/index.html
就直接跳转登录页面了!
现在实现管理员登录:
1.在client/AccountHandler中修改login部分的代码:
case “user”:部分中 idstr 和 id 定义在上面
String result = null;
String idstr = null;
原来变为:
idstr = hashMap.get("id")+"";//转成String,而不能装置转换类型!
id = Long.parseLong(idstr);
case “admin”:中
Admin admin = (Admin) object; 改为 Admin admin = new Admin();
@PostMapping("/login")
public String login(@RequestParam("username")String username, @RequestParam("password")String password, @RequestParam("type")String type, HttpSession session){
Object object = accountFeign.login(username, password, type);
LinkedHashMap<String,Object> hashMap = (LinkedHashMap)object;
String result = null;
String idstr = null;
long id = 0;
if(object == null){
result = "login";
}else{
switch (type){
case "user":
User user = new User();
idstr = hashMap.get("id")+"";//转成String,而不能装置转换类型!
id = Long.parseLong(idstr);
String nickname = (String)hashMap.get("nickname");
user.setId(id);
user.setNickname(nickname);
session.setAttribute("user",user);
result = "index";
break;
case "admin":
Admin admin = new Admin();
idstr = hashMap.get("id")+"";
id = Long.parseLong(idstr);
String username2 = (String) hashMap.get("username");
admin.setId(id);
admin.setUsername(username2);
session.setAttribute("admin",admin);
result = "main";
break;
}
}
return result;
}
测试
2. 进入 http://localhost:8030/login.html
登录后:
3.在client/controller/UserHandler中删除redirect部分,将save和deleteById的return中user改为menu,即通过menu中redirect后台映射
package com.southwind.controller;
import com.southwind.entity.User;
import com.southwind.entity.UserVO;
import com.southwind.feign.UserFeign;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import java.util.Date;
@Controller
@RequestMapping("/user")
public class UserHandler {
@Autowired
private UserFeign userFeign;
/*增*/
@PostMapping("/save")
public String save(User user){
user.setRegisterdate(new Date());//注册时间系统给出
userFeign.save(user);
return "redirect:/menu/redirect/user_manage";
}
/*删*/
@GetMapping("/deleteById/{id}")
public String deleteById(@PathVariable("id")long id){
userFeign.deleteById(id);
return "redirect:/menu/redirect/user_manage";
}
/*查*/
@GetMapping("/findAll")
@ResponseBody
public UserVO findAll(@RequestParam("page") int page , @RequestParam("limit") int limit){
int index = (page - 1)*limit;
UserVO userVO = new UserVO();
userVO.setCode(0);;
userVO.setMsg("");
userVO.setCount(userFeign.count());
userVO.setData(userFeign.findAll(index, limit));
return userVO;
}
@GetMapping("/count")
public int count(){
return userFeign.count();
}
}
4.在client/controller/MenuHandler中把deleteById、save、update最后return的路径由index改为menu_manage
package com.southwind.controller;
import com.southwind.entity.Menu;
import com.southwind.entity.MenuVO;
import com.southwind.feign.MenuFeign;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
import java.util.List;
/*
@RestController返回数据
@Controller返回视图,对应redirect,若用@RestController,则返回”index.html“
*/
@Controller
@RequestMapping("/menu")
public class MenuHandler {
@Autowired
private MenuFeign menuFeign;
@GetMapping("/findAll")
@ResponseBody
public MenuVO findAll(@RequestParam("page") int page , @RequestParam("limit") int limit){
int index = (page - 1)*limit;
return menuFeign.findAll(index , limit);
}
@GetMapping("/redirect/{location}")
public String redirect(@PathVariable("location")String location){
return location;
}
@GetMapping("/deleteById/{id}")
public String deleteById(@PathVariable("id")long id){
menuFeign.deleteById(id);
return "redirect:/menu/redirect/menu_manage";
}
@GetMapping("/findTypes")
public ModelAndView findTypes(){
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("menu_add");
modelAndView.addObject("list" , menuFeign.findTypes());
return modelAndView;
}
@PostMapping("/save")
public String save(Menu menu){
menuFeign.save(menu);
return "redirect:/menu/redirect/menu_manage";
}
@GetMapping("/findById/{id}")
public ModelAndView findById(@PathVariable("id")long id){
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("menu_update");
modelAndView.addObject("menu" , menuFeign.findById(id));//该菜品的信息
modelAndView.addObject("list" , menuFeign.findTypes());//该菜品可选择的下拉框
return modelAndView;
}
@PostMapping("/update")
public String update(Menu menu){
menuFeign.update(menu);
return "redirect:/menu/redirect/menu_manage";
}
}
5.在client/main.html的第79行src中account改为menu的后台映射
6.刷新刚刚的 http://localhost:8030/account/login
想修改红框处的菜,点击编辑:
改成这样:
提交后:
修改成功!
添加菜品:
1.在client/main.html中d第15行< script>下的menu_add部分改为attr(“src”,"/menu/findTypes")
其他部分的路径也均改为经过menu的后台映射
<script type="text/javascript">
$(function () {
$("#menu_manage").click(function(){
$("iframe").attr("src","/menu/redirect/menu_manage");
});
$("#menu_add").click(function(){
$("iframe").attr("src","/menu/findTypes");
});
$("#order_handler").click(function(){
$("iframe").attr("src","/menu/redirect/order_handler");
});
$("#user_manage").click(function(){
$("iframe").attr("src","/menu/redirect/user_manage");
});
$("#user_add").click(function(){
$("iframe").attr("src","/menu/redirect/user_add");
});
})
</script>
然后 刷新 http://localhost:8030/account/login,点击添加菜品后
成功进入添加菜品页面
提交后:
成功添加!
2.启动user服务
刷新 http://localhost:8030/account/login,点击查询用户
提交后
添加用户成功!
上一节链接:
https://blog.csdn.net/qq_40893824/article/details/103643682
下一节链接:
https://blog.csdn.net/qq_40893824/article/details/103647148