需析:
一个登录界面login.jsp,如果登录成功,跳转到main.jsp,如果登录不成功,重定向登录页面
另外,main.jsp在未登录时不能进行访问,登录后可以直接访问
具体做法:
- 首先有一个login.jsp
- user(id,username,password)、mapper、service等就不说了(Impl提供根据username和password查询user的方法)
- 为了main.jsp未登录时不能直接访问,只有jsp经过servlet才能对jsp请求进行操作,所以写一个restful风格的controller方法,使所有请求都通过(不用担心请求冲突的问题,springmvc会选择最精确的方法)
- 在拦截器对请求进行拦截时,放过所有非jsp请求(比如login,通过判断req.geturi),然后剩下的就都是jsp请求,如果session中有值,就return true,没值就重定向 return false
- 对于login请求如果成功就重定向main,不成功就重定向登录
login.jsp
<form action="login" method="post">
用户名:<input type="text" name="username">
密码:<input type="password" name="password">
<input type="submit" value="登录">
controller
@Controller
public class LoginController {
@Resource
private LoginService loginServiceImpl;
//restful风格+视图解析器
@RequestMapping("{page}")
public String demo(@PathVariable("page")String page) {
return page;
}
@RequestMapping("login")
public String login(User user,HttpSession session){
User u = loginServiceImpl.selLogin(user);
if(u!=null){
//跳转到main.jsp
session.setAttribute("user", u);
return "main";
}else{
return "redirect:/login.jsp";
}
}
}
interceptor
public class LoginInterceptor implements HandlerInterceptor{
@Override
public boolean preHandle(HttpServletRequest req, HttpServletResponse res, Object arg2) throws Exception {
// TODO Auto-generated method stub
String uri = req.getRequestURI();
if(uri.equals("/springmvc/login")){
return true;
}
else{
Object object = req.getSession().getAttribute("user");
if(object!=null){
return true;
}
res.sendRedirect("/springmvc/login.jsp");
return false;
}
}
//jsp之前
@Override
public void postHandle(HttpServletRequest req, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
throws Exception {
}
@Override
public void afterCompletion(HttpServletRequest req, HttpServletResponse arg1, Object arg2, Exception arg3)
throws Exception {
}
}