springmvc,shiro,登录成功之后无法跳转页面

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了springmvc,shiro,登录成功之后无法跳转页面相关的知识,希望对你有一定的参考价值。

我的跳转是ajax登录,如果成功,服务器返回一个字符串success,前台ajax回调中判断如果是success,则window.location.href,在本地完全好用,放到服务器上就不好用
本人web项目是springMvc,shiro登录,在本地测试完美运行,但是放到linux服务器上,浏览器的控制台就报错,说服务器内部错误,登录之后一直无法跳转页面,但是我在linux服务器的控制台上根本没发现错误,但就是无法返回成功,不知道这是什么原因,有大神能帮忙看看吗??

1、力推 Filter 过滤器,

2、后台判断根据权限跳转页面

登陆成功后获取 Subject 对象.

然后通过 Subject 对象来判断当前用户的角色/权限,之后执行不同的跳转(直接在LoginAction中做).
参考技术A AuthenticationInfo authcInfo = new SimpleAuthenticationInfo(shop.getLoginName(), shop.getPassword(), "昵称或真实姓名");
Subject currentUser = SecurityUtils.getSubject();

Session session = currentUser.getSession();
session.setAttribute();
仅供参考。

springMVC集成shiro权限认证框架,登录之后退出登录出现登录不上的问题

有两种解决方式:

1.在web.xml文件配置一段欢迎页面:

<welcome-file-list>
    <welcome-file>/index.do</welcome-file>     
 </welcome-file-list>

 

 2.在自定义表单过滤器MyFormAuthenticationFilter里,添加清除shiro 在sesion存储的上一次访问地址 shiroSavedReques 

技术图片

 

 1 package cn.zj.logistic.shiro;
 2 
 3 import javax.servlet.ServletRequest;
 4 import javax.servlet.ServletResponse;
 5 import javax.servlet.http.HttpServletRequest;
 6 
 7 import org.apache.commons.lang3.StringUtils;
 8 import org.apache.shiro.authc.AuthenticationToken;
 9 import org.apache.shiro.session.Session;
10 import org.apache.shiro.subject.Subject;
11 import org.apache.shiro.web.filter.authc.FormAuthenticationFilter;
12 import org.apache.shiro.web.util.WebUtils;
13 
14 public class MyFormAuthenticationFilter extends FormAuthenticationFilter 
15 
16     @Override
17     protected boolean onAccessDenied(ServletRequest request, ServletResponse response) throws Exception 
18 
19         HttpServletRequest req = (HttpServletRequest) request;
20 
21         // 1.获取前台表单提交的验证码
22         String verifyCode = req.getParameter("verifyCode");
23 
24         
25         
26         String rand = (String) req.getSession().getAttribute("rand");
27 
28         System.out.println("rand :" + rand);
29 
30         if (StringUtils.isNotBlank(verifyCode)) 
31             if (!verifyCode.equals(rand.toLowerCase())) 
32                 // 共享一个错误信息到 shiroLoginFailure
33                 request.setAttribute("shiroLoginFailure", "verifyCodeError");
34 
35                 // 返回true,shiro就不再进行下一操作(数据库认证)了,直接返回了
36                 return true;
37             
38         
39 
40         return super.onAccessDenied(request, response);
41     
42 
43     @Override
44     protected boolean onLoginSuccess(AuthenticationToken token, Subject subject, ServletRequest request,
45             ServletResponse response) throws Exception 
46                 
47     
48         // 1.获取sesssion
49         Session session = subject.getSession(false);
50         if (session != null) 
51             // 清除shiro共享的上一次地址 ://shiroSavedRequest
52             session.removeAttribute(WebUtils.SAVED_REQUEST_KEY);
53         
54 
55         return super.onLoginSuccess(token, subject, request, response);
56     
57 
58 

 

以上是关于springmvc,shiro,登录成功之后无法跳转页面的主要内容,如果未能解决你的问题,请参考以下文章

springMVC集成shiro权限认证框架,登录之后退出登录出现登录不上的问题

shiro springmvc的controller要怎么写

shiro+springmvc集成时,配置loginUrl='login.jsp',但是login.jsp页面在WEB-INF 目录下,导致无法显示

apache shiro 使用 Hashing Credentials 无法成功登录

shiro过滤器过滤属性含义

shiro过滤器过滤属性含义