VAADIN + TomEE рдкрд░ рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП JAAS рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛

рдореИрдВ 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

рд╣рдо 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 рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИ ред

рдФрд░ рдПрдХ рдбреЗрдореЛ рднреАред

рд╕рдВрджрд░реНрдн:


  1. рдЖрдзрд┐рдХрд╛рд░рд┐рдХ Apache TomEE рд╡реЗрдмрд╕рд╛рдЗрдЯ
    tomee.apache.org/index.html
  2. рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╕рд╛рдЗрдЯ VAADIN
    vaadin.com
  3. JAAS рдФрд░ TomEE
    tomee.apache.org/tomee-jaas.html
  4. рд╕реБрд░рдХреНрд╖рд╛ рдЯрдореА
    tomee.apache.org/security.html
  5. рдПрдХ рд╕рд░рд▓ рд▓реЙрдЧрд┐рди рджреГрд╢реНрдп рдмрдирд╛рдирд╛
    vaadin.com/wiki/-/wiki/Main/Creating%20a%20simple%20login%20view

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


All Articles