рдХрд┐рд╕реА рдлрд╝реНрд░реЗрдо рд╕реЗ рдкреГрд╖реНрда рдХреЛ рдкреЙрдк рдЕрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡рд▓реЗрдЯ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛

рд╢реБрдн рджреЛрдкрд╣рд░

рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ, рдореБрдЭреЗ Google рд╕рдВрдкрд░реНрдХ рдореЗрдВ рд╕рдВрдкрд░реНрдХ рд╕рд╣реЗрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред рдпрд╣ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИ - рдЖрдкрдХреЛ рдмрд╕ OAuth рд╕реЗ Google рдореЗрдВ рд▓реЙрдЧ рдЗрди рдХрд░рдиреЗ рдФрд░ рдПрдХ рдкрд╛рд╕рдХреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рд╕рдВрдХреНрд░рдордг Google рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рд╕рдВрдкрд░реНрдХ рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рдкрд╣реБрдВрдЪ рдХрд╛ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдФрд░ рдкреБрд╖реНрдЯрд┐ рд╣реЛрддреА рд╣реИред рдореИрдВрдиреЗ рдПрдХ iframe рдореЗрдВ рдПрдХ рд╕рдВрдкрд░реНрдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рди рд▓рд┐рдпрд╛, рдФрд░ рдХреНрд▓рд┐рдХрдЬреИрдХрд┐рдВрдЧ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП, Google рдЗрд╕рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред рддреЛ, рдЖрдкрдХреЛ рдХреБрдЫ рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ рддрд╛рдХрд┐ OAuth рдкреГрд╖реНрда рдореБрдЦреНрдп рд╡рд┐рдВрдбреЛ рдореЗрдВ рдЦреБрд▓ рдЬрд╛рдП, рди рдХрд┐ рдлрд╝реНрд░реЗрдо рдореЗрдВред рдореЗрд░рд╛ рд╕рдорд╛рдзрд╛рди рдХрдЯ рдХреЗ рдиреАрдЪреЗ рд╣реИред

рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдПрдХ рдЕрд▓рдЧ рдкреЙрдк-рдЕрдк рд╡рд┐рдВрдбреЛ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА - рд▓реЗрдХрд┐рди рдпрд╣ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рджреНрд╡рд╛рд░рд╛ рдЕрд╡рд░реБрджреНрдз рдерд╛, рдФрд░ рдореИрдВрдиреЗ рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рдХреЛ рдЫреЛрдбрд╝рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдЕрдЧрд▓рд╛ рд╡рд┐рдЪрд╛рд░ OAuth рдкреГрд╖реНрда рдХреЛ рдореБрдЦреНрдп рд╡рд┐рдВрдбреЛ рдореЗрдВ рдлреНрд░реЗрдо рд╕реЗ "рдкреЙрдк рдЕрдк" рдХрд░рдиреЗ рдХрд╛ рдерд╛ред

рдореЗрд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ, рд╕рд░реНрд╡рд░ рднрд╛рдЧ рдХреЛ Google рдРрдк рдЗрдВрдЬрди рдХреЗ рд▓рд┐рдП рдЬрд╛рд╡рд╛ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ Google рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Google рдПрдкреАрдЖрдИ 4 рдЬрд╛рд╡рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рдВрд╕реНрдХрд░рдг 1.7 рдореЗрдВ, рджреЛ рд╡рд░реНрдЧ рджрд┐рдЦрд╛рдИ рджрд┐рдП - AbstractAppEngineAuthorizationCodeServlet рдФрд░ AbstractAppEngineAuthorizationCodeCallbackServletред рдпреЗ рдХрдХреНрд╖рд╛рдПрдВ Outh рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ "рдЖрдВрддрд░рд┐рдХ рд░рд╕реЛрдИрдШрд░" рдкрд░ рд▓реЗ рдЬрд╛рддреА рд╣реИрдВ, рдбреЗрд╡рд▓рдкрд░ рдХреЛ рдХреЗрд╡рд▓ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рд╕рд╛рде Google рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд╛ рддрд░реНрдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЫреЛрдбрд╝ рджреЗрддреА рд╣реИред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдкреГрд╖реНрда рдкрд░ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рди рдЙрди рдореЗрдВ рд╣рд╛рд░реНрдб-рд╡рд╛рдпрд░реНрдб рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрди рд╡рд░реНрдЧреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ред рдореБрдЭреЗ рдПрдХ рдлрд┐рд▓реНрдЯрд░ рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рд╕рд╣рд╛рд░рд╛ рд▓реЗрдирд╛ рдкрдбрд╝рд╛ред

рдлрд┐рд▓реНрдЯрд░ рдПрдХ рдРрд╕рд╛ рддрдВрддреНрд░ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдПрдХ рд╕рд░реНрд╡рд▓реЗрдЯ рджреНрд╡рд╛рд░рд╛ рдкреГрд╖реНрда рдмрдирд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдпрд╛ рдмрд╛рдж рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЛ рд╕рд░реНрд╡рд▓реЗрдЯ (OAuth рдкреГрд╖реНрда рдкрд░) рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рджреМрд░рд╛рди рд╣реБрдИ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рдПрдХ рдкреГрд╖реНрда рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕рдореЗрдВ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд URL рдлрд╝реНрд░реЗрдо рдореЗрдВ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореБрдЦреНрдп рд╡рд┐рдВрдбреЛ рдореЗрдВ рдЦреЛрд▓рд╛ рдЬрд╛рдПрдЧрд╛ред рдкрд╣рд▓рд╛ рд╡рд┐рдЪрд╛рд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╣реЗрдбрд░ рдореЗрдВ рд╕реНрдерд╛рди рдЯреИрдЧ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдерд╛, рдЗрд╕рдХреЗ рдореВрд▓реНрдп рдХреЛ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ рдФрд░ рдЗрд╕ рдкрд░ рдЬреЗрдПрд╕ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рди рдХрд░реЗрдВред рд▓реЗрдХрд┐рди рдкреНрд░рддрд┐рд╕рд╛рдж рд╣реЗрдбрд░ рдорд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдХреЗрд╡рд▓ рд╕рд░реНрд╡рд▓реЗрдЯреНрд╕ 3.0 (J2EE 6) рдореЗрдВ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛, рдФрд░ Google Apps рдЗрдВрдЬрди (рдпрд╛ Netbeans рдХреЗ рд▓рд┐рдП GAE рдкреНрд▓рдЧрдЗрди) рдХреЗрд╡рд▓ J2EE5 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рдЕрдиреНрдп рддрд░реАрдХреЛрдВ рд╕реЗ рдЖрдирд╛ рдкрдбрд╝рд╛ред

рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░, рдореИрдВ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рд╡рд┐рдЪрд╛рд░ рдХреЗ рд╕рд╛рде рдЖрдпрд╛ - рдПрдХ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рди рдХрд╛ рдореВрд▓реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрддреНрддрд░ рдХреЗ рд▓рд┐рдП рдбреЗрдХреЛрд░реЗрдЯрд░ рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХрд╛ рдПрдХ рдлрд┐рд▓реНрдЯрд░ рдорд┐рд▓рд╛ (рдЙрджрд╛рд╣рд░рдг рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рддрд░реАрдХреЗ рдЫреЛрдбрд╝ рджрд┐рдП рдЧрдП рд╣реИрдВ):

public class Frame2Window implements Filter { @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { try { final StringBuffer loc = new StringBuffer(); loc.setLength(0); HttpServletResponseWrapper wrappedResp = new HttpServletResponseWrapper((HttpServletResponse)response) { @Override public void sendRedirect(String location) throws IOException{ loc.setLength(0); loc.append(location); } }; chain.doFilter(request, wrappedResp); if(loc.length() > 0) { HttpServletRequest req = (HttpServletRequest) request; req.setAttribute("newUrl", loc.toString()); request.getRequestDispatcher("/pages/util/frame2window.jsp").include(request, response); } } catch (Throwable t) { //   ,      } } } 


DoFilter рд╡рд┐рдзрд┐ рдореЗрдВ, рд╣рдо рдПрдХ рдбреЗрдХреЛрд░реЗрдЯрд░ рдореЗрдВ рд╕рд░реНрд╡рд▓реЗрдЯ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рд▓рдкреЗрдЯрддреЗ рд╣реИрдВ - рдПрдХ рдЧреБрдордирд╛рдо рд╡рд░реНрдЧ рдЬреЛ HttpServletResponseWrapper рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИред рдЗрд╕ рд╡рд░реНрдЧ рдореЗрдВ, рд╣рдо SendRedirect рд╡рд┐рдзрд┐ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдкрд╛рд░рд┐рдд URL doFilter рд╡рд┐рдзрд┐ рдХреЗ рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛред рдХреНрд▓реЛрдЬрд░ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдХ рд╡реЗрд░рд┐рдПрдмрд▓ рдХреЛ рдЕрдВрддрд┐рдо рд░реВрдк рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдореЛрдбрд┐рдлрд╛рдпреЗрдмрд▓ рдмрдиреЗ рд░рд╣рдиреЗ рдХреЗ рд▓рд┐рдП - рдЗрд╕реЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рд╕реНрдЯреНрд░рд┐рдВрдЧрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдХреЗ рд╣рд╛рд╕рд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдлреНрд░реЗрдо рд╕реЗ рдореБрдЦреНрдп рд╡рд┐рдВрдбреЛ рдкрд░ рд╕реАрдзреЗ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, JSP рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:

 <%@page contentType="text/html" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>JS Redirect</title> </head> <script type="text/javascript"> (function() { if(window != window.top) window.top.location = "<%= request.getAttribute("newUrl") %>"; })(); </script> <body> </body> </html> 

Source: https://habr.com/ru/post/In141866/


All Articles