项目中有 PC 端和手机端权限验证,在配置中应该如何配置不同的过滤器(手机端和 PC 端处理逻辑不同)
shiro不同客户端登录的配置问题
-
Shiro
20 引用 • 29 回帖
相关帖子
-
shiro 登陆不需要配置过滤器。
实际上你只需要调用
SecurityUtils.getSubject().login(token);
方法就可以了。
如果你想要让手机接口通过 token 来实现 session 保持。可以通过一个不用 user 校验的接口来实现登陆(调用上面的方法),然后再把当前的 sessionId 返回到客户端。
客户端每一次请求,都把 sessionId 放到请求头中。
然后再实现一个自定义 SessionManager,例如:
public class MyWebSessionManager extends DefaultWebSessionManager { @Override public Serializable getSessionId(SessionKey key) { // 从 cookies 和 url 中获取 sessionid. Serializable id = super.getSessionId(key); // 如果没有,则从 header 中获取 id. if (id == null && WebUtils.isWeb(key)) { ServletRequest request = WebUtils.getRequest(key); ServletResponse response = WebUtils.getResponse(key); if (request instanceof HttpServletRequest) { id = ((HttpServletRequest) request).getHeader(ShiroHttpSession.DEFAULT_SESSION_ID_NAME); } } return id; } }
回答问题还要扣分 ...
大大影响积极性!!
-
wohaha •作者
@DASHU 自己定义了一个 filter
public class MobileFormAuthenticationFilter extends org.apache.shiro.web.filter.authc.AuthenticatingFilter { protected AuthenticationToken createToken(ServletRequest request, ServletResponse response) { String username = request.getParameter("username"); String password = request.getParameter("password"); if (password==null){ password = ""; } boolean rememberMe = isRememberMe(request); String host = StringUtils.getRemoteAddr((HttpServletRequest)request); return new UsernamePasswordToken(username, password.toCharArray(), rememberMe, host, null, false); } @Override protected boolean onLoginFailure(AuthenticationToken token, AuthenticationException e, ServletRequest request, ServletResponse response) { return true; } @Override protected boolean onAccessDenied(ServletRequest request, ServletResponse response) throws Exception { return executeLogin(request, response); }
}
-
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于