分析する必要が
あります:ログインインターフェイスlogin.jsp、ログインが成功した場合はmain.jspにジャンプし、ログインが失敗した場合はログインページをリダイレクトします。
さらに、ログインしていない場合はmain.jspにアクセスできず、ログイン直後にアクセス可能
特定の方法:
- 最初にlogin.jspがあります
- ユーザー(ID、ユーザー名、パスワード)、マッパー、サービスなどは言及されません(Implは、ユーザー名とパスワードに基づいてユーザーにクエリを実行する方法を提供します)
- ログインしていないときにmain.jspに直接アクセスできないようにするには、JSPのみがサーブレットを介してJSPリクエストを操作できるため、すべてのリクエストをパスさせるRESTfulスタイルのコントローラーメソッドを記述します(リクエストの競合について心配する必要はありません、springmvc最も正確な方法を選択します)
- インターセプターがリクエストをインターセプトしたら、jsp以外のすべてのリクエスト(ログイン、req.geturiの判断など)を手放すと、残りはすべてjspリクエストになります。セッションに値がある場合は、trueを返します。値がない場合は繰り返されます。Directionalreturnfalse
- ログイン要求の場合、成功するとmainをリダイレクトし、失敗するとログインをリダイレクトします。
login.jsp
<form action="login" method="post">
用户名:<input type="text" name="username">
密码:<input type="password" name="password">
<input type="submit" value="登录">
コントローラ
@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";
}
}
}
インターセプター
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 {
}
}