老系统是 SpringMVC 集成 shiro 做的权限认证。现在要改为集团统一认证。
流程为:访问域名->跳转到登录接口->判断是否登录->跳转集团登录页->登录成功后 return 回来我们的系统首页。
遇到的问题:集团登录页是个 https 的链接。登录的 Controller 最后==return "redirect:" + targetUrl;==。但是 targetUrl 改为http就可以正常跳转,如果是https虽然不影响使用,但是会一直重复调用 login 的接口。
尝试使用 http://www.baidu.com 和 https://www.baidu.com 也是一样的情况。现在不清楚问题到底是shiro引发的?还是SpringMVC的redirect引发的。奇怪的是退出的接口不管是 http 还是 https 都是正常的。
相关代码放到下面了,有懂得大手子麻烦帮忙看下给点建议!!!
// 登录接口
@RequestMapping(value = "${adminPath}/login", method = RequestMethod.GET)
public String e2Login(HttpServletRequest request,
HttpServletResponse response, Model model) {
User user = UserUtils.getUser();
// 如果已经登录,则跳转到管理首页
if (user != null) {
if (user.getId() != null && user.getId() > -1) {
return "redirect:" + Global.getAdminPath();
} else {
return "error/403";
}
} else {
String e2state = java.util.UUID.randomUUID().toString();
X3.Service.X3App x3app = new X3.Service.X3App(request, response);
x3app.SetCookie("e2state", e2state);
String targetUrl = Global.getConfig("e2.LoginUrl") + "?client_id="
+ Global.getConfig("e2.ClientId")
+ "&returnUrl="
+ Global.getConfig("e2.ReturnUrl");
model.addAttribute("targetUrl", targetUrl);
return "redirect:" + targetUrl;
}
}
// 退出接口
@RequestMapping(value = "/logout")
public String adminLogout(HttpServletRequest request,
HttpServletResponse response) {
logger.info("======================= logout====================");
X3App app = new X3App(request, null);
Subject subject = SecurityUtils.getSubject();
subject.getSession().removeAttribute(app.GetCookie("e2state"));
String returnUrl = WebUtilX.UrlEncode(Global.getConfig("u2.Callback"));
String logoutUrl = Global.getConfig("u2.LogoutUrl") + "?ClientId="
+ Global.getConfig("u2.ClientId") + "&ReturnUrl=" + returnUrl;
String returnUrl = WebUtilX.UrlEncode(Global.getConfig("e2.ReturnUrl"));
String logoutUrl = Global.getConfig("e2.LogoutUrl") + "?ClientId="
+ Global.getConfig("e2.ClientId") + "&ReturnUrl=" + returnUrl;
subject.logout();
return "redirect:" + logoutUrl;
}
// shiro 过滤器
<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
<property name="securityManager" ref="securityManager"/>
<property name="loginUrl" value="${adminPath}/login"/>
<property name="successUrl" value="/index"/>
<property name="filters">
<map>
<entry key="authc" value-ref="formAuthenticationFilter"/>
<entry key="oauth2Authc" value-ref="oAuth2AuthenticationFilter"/>
</map>
</property>
<property name="filterChainDefinitions">
<value>
/report/postContent/** = anon
/studentlist/** = anon
/courseInfo/** = anon
/studyInfo/** = anon
/studyservice/** = anon
/newwork/** = anon
/workflow/** = anon
/static/** = anon
/userfiles/** = anon
/servlet/** = anon
/app/**=anon
/demo/**=anon
${adminPath}/login = authc
/e2/callback = oauth2Authc
/admin = anon
${adminPath}/logout = authc
/** = user
</value>
</property>
</bean>
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.