首先,我们先参考一下jeesite登录流程简单梳理这篇文章,了解一下jeesite框架中从进入登录界面到,登录成功之后进入到系统首页这之间的过程中到底经历了哪些过程。
我想实现这么一个需求:一个超链接带两个参数(账号、密码),直接请求登录系统。文章中有这样一段话“FormAuthenticationFilter根据用户登录表单提交的信息生成一个token,然后交给SystemAuthorizingRealm进行认证。先是调用doGetAuthenticationInfo进行身份验证,然后再调用doGetAuthorizationInfo进行授权验证。最后返回LoginController的login进行跳转。”。如果我们响越过系统本身的登录规则,则需要模拟这个过程。于是新创建了一个方法,代码如下:
@RequestMapping(value = "${adminPath}/singleLogin") public String singleLogin(HttpServletRequest request){ String resultPageURL = "modules/sys/sysLogin"; try { String username = request.getParameter("username"); String password = request.getParameter("password"); UsernamePasswordToken token = new UsernamePasswordToken(username, password.toCharArray(), false, "", "", false); token.setRememberMe(true); Subject currentUser = SecurityUtils.getSubject(); currentUser.login(token); if(currentUser.isAuthenticated()){ resultPageURL = "redirect:" + adminPath; }else{ token.clear(); } }catch (Exception e){ logger.error("[LoginController singleLogin]"); } return resultPageURL; }
这个地方需要注意一下,这个请求地址需要在spring-context-shiro.xml文件中的:
<bean name="shiroFilterChainDefinitions" class="java.lang.String">
增加:
${adminPath}/singleLogin = anon
访问测试:http://ip地址:端口/a/singleLogin?username=lxy&password=123