рдореИрдВ
VAADIN 7 (рдПрдХ рд╡реЗрдм рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ) рдФрд░
Apach TomEE (рдПрдХ рдЬрд╛рд╡рд╛ рдИрдИ рдХрдВрдЯреЗрдирд░ рдХреЗ рд░реВрдк рдореЗрдВ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП
JAAS (рдЬрд╛рд╡рд╛ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдФрд░ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╕реЗрд╡рд╛) рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рдХрдВрдЯреЗрдирд░ рдореЗрдВ
рджрд╛рдпрд░реЗ рдХреЛ рдкрдВрдЬреАрдХреГрдд
рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде
LoginModule
рдХреЛ
LoginModule
рд╣реЛрдЧрд╛ред
рдЖрдк рдЗрд╕реЗ рдХрдВрдЯреЗрдирд░ рдХреЗ рд╕рд░реНрд╡рд░ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдпрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдлрд╝рд╛рдЗрд▓ /src/main/webapp/META-INF/context.xml рдореЗрдВ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
<Realm className="org.apache.catalina.realm.JAASRealm" appName="ServiceLoginModule" userClassNames="org.apache.openejb.core.security.jaas.UserPrincipal" roleClassNames="org.apache.openejb.core.security.jaas.GroupPrincipal"> </Realm>
ServiceLoginModule
рдХрд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди login.config рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╣реИ
ServiceLoginModule { org.apache.openejb.core.security.jaas.ServiceProviderLoginModule required; };
рдЗрд╕рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╕рд┐рд╕реНрдЯрдо рдкреНрд░реЙрдкрд░реНрдЯреА рдХреЛ рд╕реЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛
CATALINA_OPTS: -Djava.security.auth.login.config=$CATALINA_BASE/conf/login.config
рдпрд╛ рд╕реАрдзреЗ рдЖрд╡реЗрджрди рдХреЛрдб рдореЗрдВ рдХрд░реЗрдВ:
System.setProperty("java.security.auth.login.config", тАЬyourPath/login.config");
рдЯреЙрдордИрдИ рдореЗрдВ рдХрдИ
LoginModule
- PropertiesLoginModule рджреЛ рдлрд╝рд╛рдЗрд▓реЛрдВ (users.properties рдФрд░ groups.properties) рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдФрд░ рд╕рдореВрд╣реЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ;
- SQLLoginModule рдбреЗрдЯрд╛рдмреЗрд╕ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ;
- ServiceProviderLoginModule рдЕрдкрдиреЗ рдЦреБрдж рдХреЗ LoginProvider рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ServiceLoader рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ;
- ScriptLoginModule рдЬрд╛рд╡рд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯрд┐рдВрдЧ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
рд╣рдо
ServiceProviderLoginModule
рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ рдФрд░
LoginProvider'a
рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ
LoginProvider'a
:
public class SimpleLoginProvider implements LoginProvider { @Override public List<String> authenticate(String user, String password) throws FailedLoginException { if ("admin".equals(user) && "admin".equals(password)) { return Arrays.asList("ADMIN"); } if ("user".equals(user) && "user".equals(password)) { return Arrays.asList("USER"); } throw new FailedLoginException(); } }
рдЗрд╕рдореЗрдВ
рдкреНрд░рд╛рдорд╛рдгрд┐рдХ рд╡рд┐рдзрд┐ рд╢рд╛рдорд┐рд▓ рд╣реИ, рдЬреЛ рдПрдХ рд╕рдлрд▓ рдкреНрд░рд╛рдорд╛рдгрд┐рдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рднреВрдорд┐рдХрд╛рдУрдВ рдХреА рдПрдХ рд╕реВрдЪреА рджреЗрддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЗрд╕ рдкрджреНрдзрддрд┐ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ (рдпрд╣ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдпрд╣ рддрдВрддреНрд░ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЕрдзрд┐рдХрд╛рд░ рдкреНрд░рдмрдВрдзрди рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ), рдХреЗрд╡рд▓ рджреЛ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╣реИрдВ, рдЬреЛ рд╕рдлрд▓ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЗ рдмрд╛рдж, рдХреНрд░рдорд╢рдГ ADMIN рдФрд░ USER, рднреВрдорд┐рдХрд╛рдПрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред
рдЕрдм рд╣рдо
@RolesAllowed("ADMIN")
рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдФрд░ рд╡рд┐рдзрд┐ рддрдХ рдкрд╣реБрдБрдЪ рдХреЛ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░реЗрдВ:
@Stateless public class TestBean { @RolesAllowed("ADMIN") public String getProtectedInfo() { return "It's protected information."; } }
ServiceLoader рдХреЛ рд╣рдорд╛рд░реЗ
LoginProvider
рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ / src / main / resource / META-INF / рд╕реЗрд╡рд╛рдУрдВ / рдореЗрдВ
LoginProvider'a
рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╣рдорд╛рд░рд╛
LoginProvider'a
рдХрд╛ рдкреВрд░рд╛ рдирд╛рдо рд╢рд╛рдорд┐рд▓ рд╣реИред
LoginProvider'a
:
org.psa.vaadinauth.secure.SimpleLoginProvider
рд╣рдореЗрдВ рд╕реАрдзреЗ
рдкреНрд░рдорд╛рдгрд┐рдд рдкрджреНрдзрддрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдХрдВрдЯреЗрдирд░
HttpServletRequest'a
рд╕реЗ
рд▓реЙрдЧрд┐рди рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдРрд╕рд╛ рдХрд░реЗрдЧрд╛ред рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рд▓рд┐рдП рд╡реЗрдм рдлрд╝реЙрд░реНрдо рднрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВрдЧреЗ:
public void login(String user, String password, HttpServletRequest request) throws ServletException { request.login(user, password); }
рд╡реИрдбрд┐рди рдХреА рдЕрдкрдиреА рд╡реИрдбрд┐рди рд╕рд░реНрд╡рд┐рд╕ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕реНрдЯреИрдЯрд┐рдХ
рдЧреЗрдЯрдХрдВрдЯреНрд░реАрд╕реНрдЯреЗрд╕реНрдЯ рд╡рд┐рдзрд┐ рд╢рд╛рдорд┐рд▓ рд╣реИ, рдЬреЛ рдХрд┐
HttpServletRequest
рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛрддреА рд╣реИ
HttpServletRequest
рд╣рдо рдЕрдкрдиреА
рд▓реЙрдЧрд┐рди рд╡рд┐рдзрд┐ рд╕реЗ рдкрд╛рд╕ рд╣реЛрдВрдЧреЗ:
login(username, password, (HttpServletRequest) VaadinService.getCurrentRequest());
рдкреГрд╖реНрдареЛрдВ рдХреЗ рдмреАрдЪ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдФрд░ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡рд╛рдбрд┐рди рдореЗрдВ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ
рдиреЗрд╡рд┐рдЧреЗрдЯрд░ рдШрдЯрдХ рд╣реИред рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рджреГрд╢реНрдп рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛:
getNavigator().addView(LoginView.NAME, LoginView.class); getNavigator().addView(MainView.NAME, MainView.class);
рдФрд░ рдлрд┐рд░ рдЙрдирдХреЗ рдмреАрдЪ рдореЗрдВ
рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░реЗрдВ рдХреЛ
рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░реЗрдВ рд╡рд┐рдзрд┐:
getNavigator().navigateTo(LoginView.NAME);
рдпрд╣рд╛рдБ рдореИрдВ рдореБрдЦреНрдп рдмрд┐рдВрджреБ рд▓рд╛рдпрд╛, рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб
GitHub рдкрд░ рдЙрдкрд▓рдмреНрдз
рд╣реИ ред
рдФрд░ рдПрдХ
рдбреЗрдореЛ рднреАред
рд╕рдВрджрд░реНрдн:
- рдЖрдзрд┐рдХрд╛рд░рд┐рдХ Apache TomEE рд╡реЗрдмрд╕рд╛рдЗрдЯ
tomee.apache.org/index.html - рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╕рд╛рдЗрдЯ VAADIN
vaadin.com - JAAS рдФрд░ TomEE
tomee.apache.org/tomee-jaas.html - рд╕реБрд░рдХреНрд╖рд╛ рдЯрдореА
tomee.apache.org/security.html - рдПрдХ рд╕рд░рд▓ рд▓реЙрдЧрд┐рди рджреГрд╢реНрдп рдмрдирд╛рдирд╛
vaadin.com/wiki/-/wiki/Main/Creating%20a%20simple%20login%20view