有关springMvc跳转的特点 博客分类: springmvc springMvc
有关springMvc跳转的特点:
页面的跳转会显示在地址栏,ajax不会
请求跳转(要么直接路径请求,要么方法里求动作性(controller在调用一个controller)),或直接请求页面(配置不走方法,要么方法里字符串视图),
不管哪种跳转都会把model带到跳转的目的地
动作性跳转:
forward:转发,参数不会出现在地址栏,类似post////////////多用在登陆上,服务器直接转发共享request
redirect:重定向,参数会出现在地址栏,服务求让浏览器自己(第二次)再去请求重定向地址所以有两个request,request不共享
return "redirect:////"
常规页面:
modelView();
return "///"
示例:
@RequestMapping(value = "/index")
public ModelAndView index(HttpSession session, HttpServletRequest request) throws EsteelException {
return new ModelAndView("/login");//常见页面
}
@RequestMapping(value = "/mangerIndex")
public String dwzIndex( ModelMap model,HttpSession session, HttpServletRequest request) throws EsteelException {
return "/dwzIndex";//常见页面
}
@RequestMapping(value = "/login")
public String login(OpmUser currUser, ModelMap model, HttpSession session, HttpServletRequest request) throws Exception {
Subject currentUser = SecurityUtils.getSubject(); // 获取当前的Subject
// 验证是否登录成功public static final String FORWARD_URL_PREFIX = "forward:";
String resultPageURL = InternalResourceViewResolver.FORWARD_URL_PREFIX + "/";
if(currentUser.isAuthenticated()){
System.out.println("用户[" + currentUser.getPrincipal() + "]登录认证通过");
Session session1 = currentUser.getSession();
OpmUser user =(OpmUser) session1.getAttribute("currentUser");
OpmUserRole u = new OpmUserRole();
u.setUserid(user.getId());
List<OpmUserRole> ur=opmUserRoleService.getOpmUserRole(u);//本系统中是一个用户一个角色
String roleId="";
String leave=user.getLevel1();
if(ur!=null&&ur.size()>0&&ur.get(0)!=null){
roleId=ur.get(0).getRoleid();
}
model.addAttribute("username", currentUser.getPrincipal());
model.addAttribute("roleId", roleId);//当前用户登录角色ID
model.addAttribute("id", roleId);//当前修改维护的角色Id
model.addAttribute("leave",leave);
model.addAttribute("organid",user.getOrganid());
return resultPageURL+"mangerIndex";//动作性跳转
}
String username = request.getParameter("username");
String password = request.getParameter("password");
opmUserService.getOpmUsers();
String verifyCode = (String) request.getSession().getAttribute("validateCode"); // 获取HttpSession中的验证码
String submitCode = WebUtils.getCleanParam(request, "verifyCode"); // 获取用户请求表单中输入的验证码
if(StringUtils.isEmpty(username)||StringUtils.isEmpty(password)){
return resultPageURL+"index";
}
if (!StringUtils.equals(verifyCode.toLowerCase(), submitCode.toLowerCase())) {
request.setAttribute("message_login", "验证码不正确");
return resultPageURL+"index";
}
//password = MD5.encryptMD5(Base64.encode(password));
password = PasswordMD5.createEncryptPSW(password);
/* password = MD5.encryptMD5(Base64.encode("111111")); */
UsernamePasswordToken token = new UsernamePasswordToken(username, password); // 为了验证登录用户而封装的token
token.setRememberMe(true);// 设计记住用户
try {
// 在调用了login方法后,SecurityManager会收到AuthenticationToken,并将其发送给已配置的Realm执行必须的认证检查
// 每个Realm都能在必要时对提交的AuthenticationTokens作出反应
// 所以这一步在调用login(token)方法时,它会走到AuthenticationRealm.doGetAuthenticationInfo()方法中,具体验证方式详见此方法
currentUser.login(token);
resultPageURL = "dwzIndex";
} catch (UnknownAccountException uae) {
System.out.println("对用户[" + username + "]进行登录验证..验证未通过,未知账户");
request.setAttribute("message_login", "未知账户");
} catch (IncorrectCredentialsException ice) {
System.out.println("对用户[" + username + "]进行登录验证..验证未通过,错误的凭证");
request.setAttribute("message_login", "密码不正确");
} catch (LockedAccountException lae) {
System.out.println("对用户[" + username + "]进行登录验证..验证未通过,账户已锁定");
request.setAttribute("message_login", "账户已锁定");
} catch (ExcessiveAttemptsException eae) {
System.out.println("对用户[" + username + "]进行登录验证..验证未通过,错误次数过多");
request.setAttribute("message_login", "用户名或密码错误次数过多");
} catch (AuthenticationException ae) {
// 通过处理Shiro的运行时AuthenticationException就可以控制用户登录失败或密码错误时的情景
System.out.println("对用户[" + username + "]进行登录验证..验证未通过,堆栈轨迹如下");
ae.printStackTrace();
request.setAttribute("message_login", "用户名或密码不正确");
}
// 验证是否登录成功
if (currentUser.isAuthenticated()) {
System.out.println("用户[" + username + "]登录认证通过");
Session session1 = currentUser.getSession();
OpmUser user =(OpmUser) session1.getAttribute("currentUser");
OpmUserRole u = new OpmUserRole();
u.setUserid(user.getId());
List<OpmUserRole> ur=opmUserRoleService.getOpmUserRole(u);//本系统中是一个用户一个角色
String roleId="";
String leave=user.getLevel1();
if(ur!=null&&ur.size()>0&&ur.get(0)!=null){
roleId=ur.get(0).getRoleid();
}
model.addAttribute("username", username);
model.addAttribute("roleId", roleId);//当前用户登录角色ID
model.addAttribute("id", roleId);//当前修改维护的角色Id
model.addAttribute("leave",leave);
model.addAttribute("organid",user.getOrganid());
return "dwzIndex";
} else {
token.clear();
}
return resultPageURL;
}
推荐阅读
-
springMvc使用时利用重定向防止刷新请求两次 博客分类: springmvc springMvc
-
Spring MVC中Controller如何将数据返回给页面 博客分类: springmvc springmvc
-
springmvc的一个跳转特性 博客分类: springmvc springMvc
-
xml中遍历map参数 博客分类: springmvc
-
springmvc页面时间格式的处理 博客分类: springmvc springmvc
-
SpringMVC工作原理概述 博客分类: springmvc springMVC
-
springMvc直接自动转化对象为json的配置(不需要自己转成json) 博客分类: springmvc springMvc
-
springmvc 时间格式处理 博客分类: springmvc
-
有关springMvc跳转的特点 博客分类: springmvc springMvc
-
springMvc自定义注解验证 博客分类: springmvc springMvc