用cookie兑现简单的单点登录功能
用cookie实现简单的单点登录功能
看到篇博文,是关于单点登录的。
根据这个博文,自己动手尝试了一下这种单点登录解决方案,当然,这个解决方案有个缺陷,就是有个前提,应用必须能够共享cookie。
记下思路,作为备忘。
1、关于cookie的设置。cookie使用了setDomain和setPath,这样才能保证这个cookie能被所有应用共享。
2、用cookie来保存用户已登录的状态。在注销用户时,把该cookie设置过期,当然,也要使用setDomain和setPath。
3、使用了三个web project来做练习,一个作为登录验证系统,另外两个应用系统,代码基本相同。应用系统配置filter来过滤访问请求。
过滤器代码
登录验证系统的登录代码
看到篇博文,是关于单点登录的。
引用
编写你自己的单点登录(SSO)服务:http://blog.csdn.net/javachannel/article/details/752437
根据这个博文,自己动手尝试了一下这种单点登录解决方案,当然,这个解决方案有个缺陷,就是有个前提,应用必须能够共享cookie。
记下思路,作为备忘。
1、关于cookie的设置。cookie使用了setDomain和setPath,这样才能保证这个cookie能被所有应用共享。
引用
1.可在同一应用服务器内共享方法:设置cookie.setPath("/");
2.跨域共享cookie的方法:设置cookie.setDomain(".jszx.com"),这个参数必须以“.”开始。 ;
2.跨域共享cookie的方法:设置cookie.setDomain(".jszx.com"),这个参数必须以“.”开始。 ;
2、用cookie来保存用户已登录的状态。在注销用户时,把该cookie设置过期,当然,也要使用setDomain和setPath。
3、使用了三个web project来做练习,一个作为登录验证系统,另外两个应用系统,代码基本相同。应用系统配置filter来过滤访问请求。
过滤器代码
public class UserFilter implements Filter { private static String loginUrl = ""; public void destroy() { } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) request; HttpServletResponse resp = (HttpServletResponse) response; if (isCookieLogined(req)) { chain.doFilter(request, response); } else { String fromUrl = req.getRequestURL().toString(); resp.sendRedirect(loginUrl + "?fromUrl=" + fromUrl); } } public void init(FilterConfig filterConfig) throws ServletException { loginUrl = filterConfig.getServletContext().getInitParameter("loginUrl"); } private boolean isCookieLogined(HttpServletRequest req) { Cookie[] cookies = req.getCookies(); if(cookies!=null){ for (Cookie cookie : cookies) { if (cookie.getName().equals("user")&&cookie.getValue()!=null) { //TODO:此处应该调用auth的cookie验证方法 return true; } } } return false; } }
登录验证系统的登录代码
public class LoginServlet extends HttpServlet { private static final long serialVersionUID = -8212504322196762878L; private static ConcurrentMap<String, String> userMap = new ConcurrentHashMap<String, String>(); public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String fromUrl = request.getParameter("fromUrl"); request.setAttribute("fromUrl", fromUrl); request.getRequestDispatcher("index.jsp").forward(request, response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String user = request.getParameter("user"); if(this.isRegister(user)){ this.saveCookie(user, response); String fromUrl = request.getParameter("fromUrl"); response.sendRedirect(fromUrl); } } @Override /** * 初始化数据 */ public void init() throws ServletException { userMap.put("cevin", "cevin"); userMap.put("aki", "aki"); } private boolean isRegister(String user){ if(userMap.get(user)!=null){ return true; } return false; } private void saveCookie(String user, HttpServletResponse response){ Cookie cookie = new Cookie(CommonUtils.COOKIE_USER, user); cookie.setDomain(getServletContext().getInitParameter("domain")); cookie.setMaxAge(Integer.parseInt(getServletContext().getInitParameter("cookieLife"))); cookie.setPath("/"); response.addCookie(cookie); } }