解释如下代码: @GetMapping("/login") public String toLogin(){ return "login"; } @PostMapping("/login") @ResponseBody public String login(@RequestParam("username")String username, @RequestParam("password")String password, @RequestParam("remember")String remember, HttpServletRequest request, HttpServletResponse response) throws JsonProcessingException { String password_back = password; User login = userService.login(username, password); if (login!=null){ login.setLastTime(new Date()); userService.updateUser(login); HttpSession session = request.getSession(); session.setAttribute("loginUser",username); session.setAttribute("isAdmin",login.getAdmin()); User user = userService.findUserByUname(username).get(0); session.setAttribute("localUser",user); if (remember.equals("true")){ Cookie ucookie = new Cookie("unameCookie",username); Cookie pcookie = new Cookie("passwdCookie",password_back); ucookie.setMaxAge(24*3600); //cookies 保存一天 pcookie.setMaxAge(24*3600); response.addCookie(ucookie); response.addCookie(pcookie); } if ("true".equals(login.getAdmin())){ return "2"; //管理员登录返回2 } return "1"; // 普通登陆,返回1 } return "0"; // 失败,返回0.用户名或密码错误 }
时间: 2023-06-03 08:06:52 浏览: 174
这段代码是一个 Spring Boot 的 Controller 类,其中包含两个请求处理方法:toLogin 和 login。toLogin 方法处理 GET 请求,返回一个名为 "login" 的字符串,表示需要返回一个名为 "login" 的视图页面。login 方法处理 POST 请求,接收从浏览器传来的参数 username、password 和 remember,然后调用 userService 的 login 方法查询数据库,如果查询到一个 User 对象,表示用户名和密码验证通过,将登录用户信息存储到 HttpSession 中,并且设置了两个 Cookie(如果用户选择 "remember" 选项),然后根据用户的权限返回不同的字符串给浏览器。如果查询不到 User 对象,则表示验证失败,返回字符串 "0" 给浏览器。
相关问题
帮我改写以下代码,不要用servlet.代码为:@Controller public class CartController { @Autowired private UserService userService; @Autowired private CommodityService commodityService; @Autowired private CartService cartService; @GetMapping("/cart") public String cart(Model model, HttpServletRequest request) { HttpSession session = request.getSession(); User user = (User)session.getAttribute("user"); if (user == null) { return "redirect:/login"; } List<Cart> cartList = cartService.findByUid(user.getUid()); model.addAttribute("cartList", cartList); return "cart"; } @PostMapping("/cart/add") public String addCart(Integer cid, Integer cnum, HttpServletRequest request) { HttpSession session = request.getSession(); User user = (User)session.getAttribute("user"); if (user == null) { return "redirect:/login"; } Commodity commodity = commodityService.findById(cid); if (commodity == null) { return "redirect:/commodity"; } Cart cart = new Cart(); cart.setUid(user.getUid()); cart.setCid(cid); cart.setCnum(cnum); cartService.save(cart); return "redirect:/cart"; } @PostMapping("/cart/delete") public String deleteCart(Integer cartid) { cartService.deleteById(cartid); return "redirect:/cart"; }
以下是改写后的代码,使用了Spring Boot的@RestController注解和@ResponseBody注解来实现API风格的接口:
@RestController
public class CartController {
@Autowired
private UserService userService;
@Autowired
private CommodityService commodityService;
@Autowired
private CartService cartService;
@GetMapping("/cart")
public List<Cart> getCart(HttpServletRequest request) {
HttpSession session = request.getSession();
User user = (User)session.getAttribute("user");
if (user == null) {
return null;
}
List<Cart> cartList = cartService.findByUid(user.getUid());
return cartList;
}
@PostMapping("/cart/add")
public String addCart(Integer cid, Integer cnum, HttpServletRequest request) {
HttpSession session = request.getSession();
User user = (User)session.getAttribute("user");
if (user == null) {
return "redirect:/login";
}
Commodity commodity = commodityService.findById(cid);
if (commodity == null) {
return "redirect:/commodity";
}
Cart cart = new Cart();
cart.setUid(user.getUid());
cart.setCid(cid);
cart.setCnum(cnum);
cartService.save(cart);
return "success";
}
@PostMapping("/cart/delete")
public String deleteCart(Integer cartid) {
cartService.deleteById(cartid);
return "success";
}
}
这里将原来的@Controller注解改为@RestController注解,表示这是一个API控制器,不需要返回视图,而是直接返回数据。同时,将原来的Model和视图名称改为了List<Cart>,表示返回一个购物车列表。为了让返回的数据能够被前端页面接收到,我们使用@ResponseBody注解将返回值转为JSON格式。最后,将原来的重定向操作改为返回字符串"success",表示操作成功。
核心代码是哪一段,指出并给出解释 @Autowired AdminRepository repository; @GetMapping("/loginAdmin") @ResponseBody public String loginAdmin(@RequestParam("phoneOrname") String phoneOrname, @RequestParam("password") String password, HttpServletResponse response) { //这里得phoneOrname代表 手机号或者用户名 System.out.println("执行了登陆查询"); AdminInfo admin = repository.findByPhoneOrUsername(phoneOrname, phoneOrname); log.info("查询到得admininfo={}", admin); if (admin != null && admin.getPassword().equals(password)) { log.info("登录成功的token={}", admin.getAdminId());//用adminid做cookie //有效期2小时 CookieUtil.set(response, GlobalConst.COOKIE_TOKEN, "" + admin.getAdminId(), 7200); return "登录成功"; } else { throw new DianCanException(ResultEnum.LOGIN_FAIL); } } @GetMapping("/logoutAdmin") public String logout(HttpServletRequest request, HttpServletResponse response, ModelMap map) { //1. 从cookie里查询 Cookie cookie = CookieUtil.get(request, GlobalConst.COOKIE_TOKEN); if (cookie != null) { //2. 清除cookie CookieUtil.set(response, GlobalConst.COOKIE_TOKEN, null, 0); } map.put("msg", ResultEnum.LOGOUT_SUCCESS.getMessage()); map.put("url", "/diancan/adimOrder/list"); return "zujian/success"; }
核心代码是:
```
@Autowired
AdminRepository repository;
@GetMapping("/loginAdmin")
@ResponseBody
public String loginAdmin(@RequestParam("phoneOrname") String phoneOrname,
@RequestParam("password") String password,
HttpServletResponse response) {
//这里得phoneOrname代表 手机号或者用户名
System.out.println("执行了登陆查询");
AdminInfo admin = repository.findByPhoneOrUsername(phoneOrname, phoneOrname);
log.info("查询到得admininfo={}", admin);
if (admin != null && admin.getPassword().equals(password)) {
log.info("登录成功的token={}", admin.getAdminId());//用adminid做cookie
//有效期2小时
CookieUtil.set(response, GlobalConst.COOKIE_TOKEN, "" + admin.getAdminId(), 7200);
return "登录成功";
} else {
throw new DianCanException(ResultEnum.LOGIN_FAIL);
}
}
@GetMapping("/logoutAdmin")
public String logout(HttpServletRequest request,
HttpServletResponse response,
ModelMap map) {
//1. 从cookie里查询
Cookie cookie = CookieUtil.get(request, GlobalConst.COOKIE_TOKEN);
if (cookie != null) {
//2. 清除cookie
CookieUtil.set(response, GlobalConst.COOKIE_TOKEN, null, 0);
}
map.put("msg", ResultEnum.LOGOUT_SUCCESS.getMessage());
map.put("url", "/diancan/adimOrder/list");
return "zujian/success";
}
```
这段代码实现了管理员登录和注销的功能。其中,`@Autowired`注解用于自动装配`AdminRepository`对象,该对象用于数据库查询操作;`@GetMapping`注解用于处理GET请求;`@RequestParam`注解用于获取请求参数;`@ResponseBody`注解用于将返回值直接输出到响应体中。在`loginAdmin`方法中,根据传入的手机号或用户名查询数据库中相应的管理员信息,通过比对密码确定是否登录成功,并将管理员ID写入cookie中;在`logout`方法中,根据请求中的cookie删除相应的管理员ID,并返回一个成功信息。