рд╕рд╛рдЗрдЯ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЗ рджреМрд░рд╛рди рдкрд╛рд╕рд╡рд░реНрдб рд╕реЗ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдиреБрдХрд╕рд╛рди рдФрд░ рд╕рд╛рдорд╛рдЬрд┐рдХ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓реЙрдЧрд┐рди рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рдХреБрдЫ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдореВрд▓ рд░реВрдк рд╕реЗ рдпрд╣ рдпрд╛ рддреЛ рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд╡рд┐рдЪрд╛рд░реЛрдВ, рдпрд╛ рд╕реАрдПрдордПрд╕ рдореЗрдВ рдкреАрдПрдЪрдкреА рдореЗрдВ рдПрдХ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рдХреБрдЫ рдкрд╣рд▓реБрдУрдВ рдХреА рдЪрд┐рдВрддрд╛ рдХрд░рддрд╛ рд╣реИред
рдореИрдВ рдЖрдкрдХреЗ рдзреНрдпрд╛рди рдореЗрдВ VKontakte, Facebook, My World, Yandex, Odnoklassniki, Google, Twitter, рд▓рд┐рдВрдХреНрдбрдЗрди рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг JSF2 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд╛рддрд╛ рд╣реВрдВред рдпрд╣ рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдВрд▓реЗрдЦрди рд╡рд┐рдХрд╛рд╕ рд╣реИ, рдЬреЛ рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп OAuth рд░рдирд╡реЗ рдкреНрд░рджрд╛рддрд╛рдУрдВ рдХреЛ рдХрд╡рд░ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ, рд╕рд░реНрд╡рд▓реЗрдЯреНрд╕, рдЬреЗрдПрд╕рдкреА рдФрд░ рд╕реНрдкреНрд░рд┐рдВрдЧреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдХреЗрд╡рд▓ JSF2 рдФрд░ CDIред
рдпрд╣ рд╕рдм рдПрдХ рднреБрдЧрддрд╛рди рд╕рд╛рдЗрдЯ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдкреИрджрд╛ рд╣реБрдЖ рдерд╛ рдЬреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд╕реЗрд╡рд╛рдПрдВ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рд▓реЛрдЧреЛрдВ рдХреЛ рдЕрдкрдиреЗ "рдХрдард┐рди-рдЕрд░реНрдЬрд┐рдд" рд╡рд╛рд▓реЗ рдХрдо рд╕реЗ рдХрдо рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд╕рд╛рде рднрд╛рдЧ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрдбрд╝реА рдореЗрд╣рдирдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдкрд╛рд╕рд╡рд░реНрдб, рдИ-рдореЗрд▓, рдХреИрдкреНрдЪрд╛ рдФрд░ рдЯрд╛рдЗрдо рдЬрд╝реЛрди рдХреЗ рд╕рд╛рде рдЬрдЯрд┐рд▓ рдкрдВрдЬреАрдХрд░рдг рдЗрд╕рдореЗрдВ рдмрд╣реБрдд рдпреЛрдЧрджрд╛рди рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдирд┐рд░реНрдгрдп рдХреЗрд╡рд▓ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб (рджреЛ рдмрд╛рд░) рддрдХ рд╕реАрдорд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдХреЛрдИ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреНрд░рд╢реНрди рдирд╣реАрдВ! рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рдЗрд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдХрдИ рдкрдВрдЬреАрдХрд░рдг рд╣реБрдП, рдкрд╛рд╕рд╡рд░реНрдб рднреВрд▓ рдЧрдП, рдЕрдХреНрд╕рд░ рднреБрдЧрддрд╛рди рдХреЗ рдмрд╛рдж (рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рдХреЛрдИ рднреА рдЕрдкрдиреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдЦрд╛рддреЗ рдХреЛ рдпрд╛рдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ) рдФрд░ рдЗрд╕реА рддрд░рд╣ рдХреА рдкрд░реЗрд╢рд╛рдиреАред рд▓рдЧрднрдЧ рдХрд┐рд╕реА рдиреЗ рднреА рдкреНрд░рд╢реНрдирд╛рд╡рд▓реА рдирд╣реАрдВ рднрд░реА - рд╕рдорд░реНрдерди рд╕реЗрд╡рд╛ рдкреНрдпрд╛рд░реА рдирд╣реАрдВ рдереАред
рд╕рдорд╛рдзрд╛рди рдиреЗ рд╕реНрд╡рдпрдВ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛: "рдПрдХ рдХреНрд▓рд┐рдХ" рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдкрдВрдЬреАрдХрд░рдг рдФрд░ рдмрд╛рдж рдХреЗ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред OAuth рддрдХрдиреАрдХ рдХреЗ рд╕рд╛рде рд╕рд╛рдорд╛рдЬрд┐рдХ рдиреЗрдЯрд╡рд░реНрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдлрд┐рдЯ рд╣реИрдВред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдерд╛, рдХреЗрд╡рд▓ рдХреБрдЫ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ред рдЬреЛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рд╣рдорд╛рд░реА рд╕рд╛рдЗрдЯ рдХреЗ рдореБрдЦреНрдп рдкреГрд╖реНрда рдкрд░ рджреЛ рдмрдЯрди рд╣реИрдВ "рд▓реЙрдЧрд┐рди" рдФрд░ "рдкрдВрдЬреАрдХрд░рдг"ред рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ, рдЙрдиреНрд╣реЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдкрд╛рд╕ рдЧрд▓рддреА рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ - рд╡рд╣ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдХреЛрдИ рдбреЗрдЯрд╛ рджрд░реНрдЬ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЕрдЧрд░ рд╣рдореЗрдВ OAuth рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдкреНрд░рд╛рдкреНрдд рд╣реБрдЖ рдЬреЛ рдЕрднреА рддрдХ рд╣рдорд╛рд░реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рддреЛ рд╣рдо рдПрдХ рдирдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрдВрдЬреАрдХреГрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЕрдиреНрдпрдерд╛ рд╣рдо рдЗрд╕реЗ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдЖрдиреЗ рджреЗрддреЗ рд╣реИрдВред рдПрдХ рдирдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП, рдЖрдк рдЕрднреА рднреА рдПрдХ рдЧреНрд░реАрдЯрд┐рдВрдЧ рджрд┐рдЦрд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдПрдХ рд╕рд╛рд╡рдзрд╛рдиреАрдкреВрд░реНрд╡рдХ рдкрд╛рдардХ рдкреВрдЫреЗрдЧрд╛, рдЖрдкрдХреЛ рдЕрдкрдирд╛ рд╕рдорд╛рдзрд╛рди рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рдереА, рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рд╕рд╛рдорд╛рдЬрд┐рдХ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рддреИрдпрд╛рд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИрдВ рдЬреЛ рд╕рднреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ? рд╣рд╛рдБ рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕ "рд╕рднреА" рдХреЗ рд▓рд┐рдП, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдирд┐рд░рд░реНрдердХ, рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛, рдЖрдкрдХреЛ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдорд╛рддреНрд░рд╛, рдХрдИ рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рдФрд░ рд╡рд┐рднрд┐рдиреНрди (рдкреНрд░рддреНрдпреЗрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд▓рд┐рдП) рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдФрд░ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХрд╛ рднреБрдЧрддрд╛рди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд╡рд┐рджреЗрд╢реА рдмрдЧ рдФрд░ рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреЛ рднреА рдЫреВрдЯ рджреЗрдиреЗ рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИред
рддреЛ, рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рд╕рдм рдХреБрдЫ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ
Habr├й рдХреЗ рд▓реЗрдЦ рдХреЗ рд▓рд┐рдП, рдПрдХ рдбреЗрдореЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ - рднрд╛рдЧреЛрдВ рдХреЛ рдХрд╛рд░реНрдп рдкреНрд░рдгрд╛рд▓реА рд╕реЗ рдХрд╛рдЯ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рд╕рдм рдХреБрдЫ рд╢рд╛рдирджрд╛рд░ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдХреЗрд╡рд▓ рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдореЙрдбрд▓ рдмрдирд╛ рд░рд╣рд╛ред рд▓реЗрдЦ рдХреЗ рдирд┐рдЪрд▓реЗ рднрд╛рдЧ рдореЗрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдФрд░ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдВрдХ рд╣реИрдВред
рдпрд╣ рд╕рдм login.xhtml рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
рд╣рдмрдкреНрд░рдХ рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдкреНрд░рддреАрдХред рдкреНрд░рддреНрдпреЗрдХ рдЖрдЗрдХрди рдХреЛ рдПрдХ рд╡рд┐рдзрд┐ рдХреЙрд▓ рд╕реМрдВрдкрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдПрдХ рдЕрдиреБрд░реЛрдз рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ OAuth рдкреНрд░рджрд╛рддрд╛ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рднреЗрдЬрддрд╛ рд╣реИред
рдпреИрдВрдбреЗрдХреНрд╕ рдХреЗ рд▓рд┐рдП рдирдореВрдирд╛ рдХреЛрдб:
String plainUrl = "https://oauth.yandex.ru/authorize?" +"client_id="+ yaId +"&response_type=code"; FacesContext.getCurrentInstance().getExternalContext().redirect(plainUrl);
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдЕрдкрдиреЗ рдбреЗрдЯрд╛ рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдкрд░ рд╕рд╣рдорддрд┐ рджреЗрдиреЗ рдХреЗ рдмрд╛рдж, рд╡рд╣ рд╣рдорд╛рд░реА рд╕рд╛рдЗрдЯ рдкрд░ рд▓реМрдЯрддрд╛ рд╣реИ, рдореЗрдЬрдмрд╛рди рдкрдХреНрд╖ рдкреГрд╖реНрда рд╣реИ yaLogin.xhtml
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:ui="http://java.sun.com/jsf/facelets"> <h:head></h:head> <f:metadata> <f:viewParam id="code" name="code" value="#{yalogin.code}" /> <f:viewParam id="error" name="error" value="#{yalogin.error}" /> <f:viewParam id="state" name="state" value="#{yalogin.state}" /> <f:event type="preRenderView" listener="#{yalogin.phase2()}" /> </f:metadata> <body> </body> </html>
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдкреНрд░рд╛рдкреНрдд рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛрдб, рддреНрд░реБрдЯрд┐ рдФрд░ рд╕реНрдерд┐рддрд┐ рдХреЛ рд╡рд░реНрдЧ рдЪрд░ рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЪрд░рдг 2 () рд╡рд┐рдзрд┐ рд╢реБрд░реВ рдХреА рдЬрд╛рддреА рд╣реИ, рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдЧреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╕рдВрдЪрд╛рд▓рди рдХрд░рддреА рд╣реИред
рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ рддреНрд░реБрдЯрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд▓реМрдЯ рдЖрдИ рд╣реИ:
if (error!=null) { logger.info("error="+error); try { FacesContext.getCurrentInstance().getExternalContext().redirect("error.jsf"); } catch (Exception e) { logger.log(Level.SEVERE, "phase2() Error: redirect failed!", e); } return ""; }
рдпрджрд┐ рд╕рдм рдХреБрдЫ рдХреНрд░рдо рдореЗрдВ рд╣реИ, рддреЛ рд╣рдо рдПрдХ рдЯреЛрдХрди рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╣реИрдВ:
Properties props = new Properties(); props.put("grant_type", "authorization_code"); props.put("code", code); props.put("client_id", yaId); props.put("client_secret", yaSecret); String ret1 = HttpURL.httpsPost("https://oauth.yandex.ru/token", props, "UTF-8");
рдФрд░ рдкрд░рд┐рдгрд╛рдо рдкрд╛рд░реНрд╕ рдХрд░рдирд╛:
class YA{ String access_token; String token_type; } YA ya = (YA) XStreamFactory.get(YA.class, ret1);
рдПрдХреНрд╕реЗрд╕ рдЯреЛрдХрди рд╣реЛрдиреЗ рдкрд░, рдЖрдк рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
String ret2 = HttpURL.httpsGet("https://login.yandex.ru/info?format=json&oauth_token="+ya.access_token); class PersonData { public String birthday; public String display_name; public String sex; public String id; public String default_email; public String real_name; } PersonData personData = (PersonData) XStreamFactory.get(PersonData.class, ret2);
рдЕрдм рдЖрдк рдкреНрд░рд╛рдкреНрдд рдбреЗрдЯрд╛ рдХреЛ рдХреЛрд░ рдСрдмреНрдЬреЗрдХреНрдЯ (рдбрд┐рд╕реНрдкреИрдЪрд░) рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
core.getUserAutoReqProps().setEmail(personData.default_email); String[] fname = personData.real_name.split(" "); core.getUserAutoReqProps().setLastName(fname[0]); core.getUserAutoReqProps().setFirstName(fname[1]); core.getUserAutoReqProps().setSex("male".equalsIgnoreCase(personData.sex)); DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); core.getUserAutoReqProps().setBorn(dateFormat.parse(personData.birthday));
рдЕрджреНрд╡рд┐рддреАрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЖрдИрдбреА рдпрд╛рдж рд░рдЦреЗрдВ рдФрд░ рд╕рд╛рдЗрдЯ рдХреЗ рд╕рдВрд░рдХреНрд╖рд┐рдд рд╣рд┐рд╕реНрд╕реЗ рдореЗрдВ рдЬрд╛рдПрдВ:
core.setValidatedId("http://my.ya.ru/"+personData.id); FacesContext.getCurrentInstance().getExternalContext().redirect("welcome.jsf");
рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдкреНрд░рдорд╛рдгрд┐рдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╣реИ! рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рдЗрд╕реЗ рдЕрднреА рднреА рдЕрдзрд┐рдХреГрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд▓реЗрдЦ рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдкрд░реЗ рд╣реИред
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдПрдХ OAuth рдкреНрд░рджрд╛рддрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдЬрд╛рд╡рд╛ рдХреНрд▓рд╛рд╕ рдФрд░ рдПрдХ рдПрдХреНрд╕рдПрдЪрдЯреАрдПрдордПрд▓ рдкреЗрдЬ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИрдВред рдпрд╛рдВрдбреЗрдХреНрд╕ рдХреЗ рд▓рд┐рдП, рдпрд╣ YALogin.java рдФрд░ yaLogin.xhtml рд╣реЛрдЧрд╛, рдХреНрд░рдорд╢рдГ VKontakte VKLogin.java рдФрд░ vkLogin.xhtml рдХреЗ рд▓рд┐рдП, рдФрд░ рдЗрд╕реА рддрд░рд╣, рд╕рд╛рджреГрд╢реНрдп рджреНрд╡рд╛рд░рд╛ред
рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдкрдВрдЬреАрдХрд░рдг рдХреЗ рджреМрд░рд╛рди рдкреНрд░рд╛рдкреНрдд рдЖрдИрдбреА рдФрд░ рд╕реАрдХреНрд░реЗрдЯ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣рд▓ рдХреА рдЧрдИ рдереА: рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рд░реНрд╡рд░ рдХреА рдлрд╝рд╛рдЗрд▓ рдкреНрд░рдгрд╛рд▓реА рдкрд░ рдПрдХ рдмрд╛рд╣рд░реА рдлрд╝рд╛рдЗрд▓ рдореЗрдВред рдпрд╣ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдлрд╛рдпрджреЗ рджреЗрддрд╛ рд╣реИ: рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рдкрд╛рд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдбреЗрдЯрд╛ рдФрд░ рд╕рд░реНрд╡рд░ рдкрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдбреЗрдЯрд╛ рд╣реИ, рддреИрдирд╛рддреА рдХреЗ рджреМрд░рд╛рди рдХреБрдЫ рднреА рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рдЧреЛрдкрдиреАрдпрддрд╛ рдХрд╛ рд╕рдореНрдорд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред Oauth.properties рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рд╣реИред
рдлрд╝рд╛рдЗрд▓ рдкрде web.xml рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИ:
<context-param> <param-name>OAuthPropertiesPath</param-name> <param-value>/opt/oauth/oauth.properties</param-value> </context-param>
рдЬрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдПрдХреНрд╢рди рдмреАрди рдЦреБрд▓рддреА рд╣реИ рдФрд░ рдЗрд╕ рдлрд╛рдЗрд▓ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рддреА рд╣реИред
@Named @ApplicationScoped public class OAuthDAO implements Serializable { private static final long serialVersionUID = 1L; private Properties prop; private static Logger logger = Logger.getLogger(OAuthDAO.class.getName()); public OAuthDAO() { load(); } public boolean load(){ try (FileInputStream fis = new FileInputStream(FacesContext.getCurrentInstance().getExternalContext().getInitParameter("OAuthPropertiesPath"))){ prop = new Properties(); prop.load(fis); if (prop.isEmpty()) { return false; } } catch (Exception ex) { return false; } return true; } public String getProperty(String key) { return prop.getProperty(key); } }
рдкреНрд░рд╕реНрддреБрдд рдкрд░реАрдХреНрд╖рдг рдЖрд╡реЗрджрди рдореЗрдВ, рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рд╕реНрд╡рд╛рдЧрддред Html рдкреГрд╖реНрда рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЖрд╡реЗрджрди рдХреЗ рд╕рдВрд░рдХреНрд╖рд┐рдд рднрд╛рдЧ рдХрд╛ рдкреНрд░рддреАрдХ рд╣реИред рдХрд┐рд╕реА рдЕрдирдзрд┐рдХреГрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЗрд╕ рдкреГрд╖реНрда рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рд╕реЗ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП, рдХреЛрд░.рдлрд┐рд╢рд┐рдпрд▓ () рдкрджреНрдзрддрд┐ рдХреЛ рдкреНрд░реАрд░реЗрдВрдбрд░ рд╡реНрдпреВ рдЗрд╡реЗрдВрдЯ рджреНрд╡рд╛рд░рд╛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИред
<f:metadata> <f:event listener="#{core.fiscal()}" type="preRenderView" /> </f:metadata>
рдбреЗрдореЛ рдЧреНрд▓рд╛рд╕рдлрд┐рд╢ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рд░реНрд╡рд░ рдЪрд▓рд╛ рд░рд╣рд╛ рд╣реИред JSON рдФрд░ XML рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, XStream рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЖрд╡реЗрджрди
рдпрд╣рд╛рдБ рджреЗрдЦреЗрдВред
рдпрд╣рд╛рдВ рдЧреНрд░рд╣рдг рдХреЗ рддрд╣рдд рдкрд░рд┐рдпреЛрдЬрдирд╛ рдбрд╛рдЙрдирд▓реЛрдб
рдХрд░реЗрдВ ред