OpenShift: "рд╣реИрд▓реЛ, рдХреНрд▓рд╛рдЙрдб!"

рдпрд╣ рдПрдХ рдЬрд╛рд╡рд╛ рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ OpenShift рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдиреЛрдЯ рдХрд╛ рдПрдХ рд╕рд┐рд▓рд╕рд┐рд▓рд╛ рд╣реИред
рдкрд┐рдЫрд▓реА рдмрд╛рд░, рд╣рдордиреЗ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рдерд╛ рдХрд┐ рдУрдкрдирд╢рд┐рдлреНрдЯ рдХреНрд▓рд╛рдЙрдб рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреИрд╕реЗ рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВред рд╣рдордиреЗ JBoss AS 7.1 рд╕рд░реНрд╡рд░ рдФрд░ рдЧрд┐рдЯ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рд╕рд╛рде рдореБрдлреНрдд рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдкреНрд░рджрд╛рди рдХреА рд╣реИред рдЕрдм рд╕рд╛рдорд╛рдиреНрдп "рд╣реЗрд▓реНрд▓реЛ, рд╡рд░реНрд▓реНрдб" рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХреБрдЫ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд▓рд┐рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ JBoss AS рдФрд░ JBoss рдЯреВрд▓ рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдЯреВрд▓реНрд╕ рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред


рд╕рд╛рдорд╛рдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ: рдХреЗрд╡рд▓ рдХреБрдЫ рдЕрдзрд┐рдХреГрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рддрдХ рдкрд╣реБрдБрдЪ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдирд╛, рдирд┐рдпрдд рднреВрдорд┐рдХрд╛рдУрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЕрд▓рдЧрд╛рд╡ рдХреЗ рд╕рд╛рдеред рдпрд╣ jboss рдореЗрдВ рдирд┐рд░реНрдорд┐рдд рд▓реЙрдЧрд┐рди рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, org.jboss.security.auth.spi.DatabaseServerLoginModule рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рд╣реИред рдпрд╣ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИ, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдФрд░ рдЙрдирдХреА рднреВрдорд┐рдХрд╛рдУрдВ рдХреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдбреЗрдЯрд╛ рдпреЛрдЬрдирд╛ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ: рдпреЗ APP_USER рддрд╛рд▓рд┐рдХрд╛ (рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛), APP_ROLE (рднреВрдорд┐рдХрд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛) рдФрд░ APP_MEMBERSHIP (рдЕрд╕рд╛рдЗрди рдХреА рдЧрдИ рднреВрдорд┐рдХрд╛рдПрдБ) рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╣рд▓реЗ рджреЛ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЗ рдмреАрдЪ рдХрдИ-рд╕реЗ-рдХрдИ рд╕рдВрдмрдВрдз рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рд╣реЛрддреЗ рд╣реИрдВред


рд╡реЗрдм рдХрдВрд╕реЛрд▓ рдореЗрдВ mysql-5.1 рдХрд╛рд░рддреВрд╕ рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ jbossas-7 рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдПрдВ рдФрд░ рдЗрд╕реЗ рдЧреНрд░рд╣рдг рдореЗрдВ рдЖрдпрд╛рдд рдХрд░реЗрдВред рдЖрдкрдХреЛ рд╡реЗрдм рдкрд░рд┐рдкреНрд░реЗрдХреНрд╖реНрдп рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж, рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдЬрд╛рд╡рд╛ рд╕рдВрд╕рд╛рдзрди рдЕрдиреБрднрд╛рдЧ рдХреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рдпреБрдХреНрдд рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рд╕рдорд╕реНрдпрд╛ рдирд┐рд╡рд╛рд░рдг рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛рдПрдЧрд╛ред
Project configuration is not up-to-date with pom.xml. Run project configuration update 
рд╣рдо рдЗрд╕ рд╕рд▓рд╛рд╣ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реИрдВ: рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд░реВрдЯ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ, рдорд╛рд╡реЗрди рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ -> рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕рдВрджрд░реНрдн рдореЗрдиреВ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ, рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ, рдФрд░ рддреНрд░реБрдЯрд┐ рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рддреА рд╣реИред

рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЯреНрд░реА рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдВ:

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд╛рд╡рд╛ рдХреНрд▓рд╛рд╕реЗрд╕ рдФрд░ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдлреЛрд▓реНрдбрд░ рд╣реИрдВ, рд╕рд╛рде рд╣реА рд╡реЗрдмреИрдк рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ index.html рдлрд╛рдЗрд▓реНрд╕, jsp рдлрд╛рдЗрд▓реНрд╕ рдХреА рдПрдХ рдЬреЛрдбрд╝реА, рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрд╢рди рдХреЗ рд╕рд╛рде рдПрдХ WEB-INF рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рд╣реИред Health.jsp рдлрд╝рд╛рдЗрд▓ рдХреЛ рддреБрд░рдВрдд рд╣рдЯрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рд╕рд╛рде рд╣реА рд╕рд╛рде web.xml рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рд╕реЗ рд╕реНрд╡рд╛рд╕реНрдереНрдп рд╕рд░реНрд╡рд▓реЗрдЯ рдХрд╛ рд╡рд░реНрдгрди), рдпрд╣ рдпрд╣рд╛рдБ рдХреНрдпреЛрдВ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИред Snoop.jsp рдлрд╝рд╛рдЗрд▓ рдЕрднреА рднреА рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддреА рд╣реИ, рдпрд╣ рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдЖрдВрдХрдбрд╝реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреА рд╣реИред
рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдЬрдбрд╝ рдореЗрдВ рдПрдХрд▓ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд╕рд╛рде pom.xml рд╣реИ
 <dependency> <groupId>org.jboss.spec</groupId> <artifactId>jboss-javaee-6.0</artifactId> <version>1.0.0.Final</version> <type>pom</type> <scope>provided</scope> </dependency> 

рдпрд╣ рд╣рдореЗрдВ jboss рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╕рднреА рдореЙрдбреНрдпреВрд▓ рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ (рдЖрдк рд▓рд╛рдЗрдмреНрд░реЗрд░реА - рдорд╛рд╡реЗрди рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реА рд╢рд╛рдЦрд╛ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдХреЗ рдкреВрд░реА рд╕реВрдЪреА рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред

рд╕рд░реНрд╡рд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реЗрдЯрдЕрдк


рдЕрдм рд╣рдореЗрдВ рдПрдХ рдРрд╕реА рдлрд╝рд╛рдЗрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЧреНрд░рд╣рдг рджреНрд╡рд╛рд░рд╛ рдЖрдпрд╛рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдпрд╣ .openshift / config / standalone.xml рдкрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИ, рдФрд░, рдЬреИрд╕рд╛ рдХрд┐ рдирд╛рдо рдХрд╛ рдЕрд░реНрде рд╣реИ, jboss рд╕рд░реНрд╡рд░ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХрд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдмрддрд╛рддрд╛ рд╣реИред рдЖрдЗрдП рдЗрд╕реЗ рдпрд╣реАрдВ рдЧреНрд░рд╣рдг рдореЗрдВ рдЦреЛрд▓реЗрдВ (рдпрджрд┐ рдЖрд╡реЗрджрди рд╕реНрдерд╛рдиреАрдп jboss рд╕рд░реНрд╡рд░ рдкрд░ рдбрд┐рдмрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рд╕рд░реНрд╡рд░ рдлрд╝реЛрд▓реНрдбрд░ рд╕реНрдЯреИрдВрдбрдЕрд▓реЛрди / рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди / рд╕реНрдЯреИрдВрдбрдЕрд▓реЛрди.рдПрдХреНрд╕рдПрдордПрд▓ рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рдЗрд╕реА рддрд░рд╣ рдХреЗ рдЬреЛрдбрд╝рддреЛрдбрд╝ рдХрд░рдиреЗ рд╣реЛрдВрдЧреЗ)ред

рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рд╕реЗрдЯрд┐рдВрдЧ

рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд░реВрд╕реА рдкрд╛рддреНрд░реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХрдиреЗрдХреНрд╢рди рдХреЛ UTF-8 рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдореЗрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореИрд╕рдХрд▓реНрд╕) рдкрд╛рдПрдВрдЧреЗ рдФрд░ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдЬреЛрдбрд╝реЗрдВрдЧреЗ:
 <connection-url>jdbc:mysql://${env.OPENSHIFT_DB_HOST}:${env.OPENSHIFT_DB_PORT}/${env.OPENSHIFT_GEAR_NAME}?characterEncoding=UTF-8</connection-url> 


рдкреНрд░рдорд╛рдгрди рдореЙрдбреНрдпреВрд▓ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ

рдЕрдм рдПрдХ рд╕реБрд░рдХреНрд╖рд╛ рдбреЛрдореЗрди рдмрдирд╛рдПрдБ, рдЬрд┐рд╕реЗ рд╣рдо рдирд╛рдо рджреЗрдВрдЧреЗ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, "рдРрдк-рдСрд░реНрдХрд┐рдЯреЗрдХреНрдЯ"ред рд╕рдмрд╕рд┐рд╕реНрдЯрдо "urn: jboss: рдбреЛрдореЗрди: рд╕реБрд░рдХреНрд╖рд╛: 1.1" рдХреЛ рдвреВрдВрдврдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рд╣рдорд╛рд░реЗ рдбреЛрдореЗрди рдХрд╛ рд╡рд┐рд╡рд░рдг рдЬреЛрдбрд╝реЗрдВ:
 <security-domain name="app-auth"> <authentication> <login-module code="org.jboss.security.auth.spi.DatabaseServerLoginModule" flag="required"> <module-option name="dsJndiName" value="java:jboss/datasources/MysqlDS"/> <module-option name="principalsQuery" value="select PWD from APP_USER where USER_NAME=? and ENABLED=1"/> <module-option name="rolesQuery" value="select r.ROLE_NAME, 'Roles' from APP_ROLE r, APP_MEMBERSHIP m, APP_USER u where r.ROLE_ID=m.ROLE_ID and m.USER_ID=u.USER_ID and u.USER_NAME=?"/> <module-option name="hashAlgorithm" value="SHA-1"/> <module-option name="hashEncoding" value="base64"/> </login-module> </authentication> </security-domain> 

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЧреБрдг dsJndiName, рдкреНрд░рд┐рдВрд╕рд┐рдкрд▓реЛрдВ, рднреВрдорд┐рдХрд╛рдУрдВ, рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рд╕реНрдкрд╖реНрдЯ рд╣реИред рдЕрдВрддрд┐рдо 2 рдЧреБрдг рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдкрд╛рд╕рд╡рд░реНрдб рд╣реИрд╢ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрджрд┐ рдЗрди рдЧреБрдгреЛрдВ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдкрд╛рд╕рд╡рд░реНрдб рдХреЛ рд╕реНрдкрд╖реНрдЯ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЬреЛ рдбреАрдмрдЧрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕реЗрдЯрд┐рдВрдЧреНрд╕: рдЪреЗрд╣рд░реЗ, рд╕реБрд░рдХреНрд╖рд╛, рдкреНрд░рд╛рд░рдВрдн


рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ web.xml рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:
  <!-- JSF mapping --> <servlet> <servlet-name>Faces Servlet</servlet-name> <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>Faces Servlet</servlet-name> <url-pattern>*.xhtml</url-pattern> </servlet-mapping> <!-- security --> <login-config> <auth-method>FORM</auth-method> <realm-name>app-auth</realm-name> <form-login-config> <form-login-page>/login.xhtml</form-login-page> <form-error-page>/login.xhtml</form-error-page> </form-login-config> </login-config> <security-role> <role-name>Admin</role-name> </security-role> <security-role> <role-name>Manager</role-name> </security-role> <security-constraint> <web-resource-collection> <web-resource-name>Admin Part</web-resource-name> <url-pattern>/admin/*</url-pattern> <http-method>GET</http-method> <http-method>POST</http-method> </web-resource-collection> <auth-constraint> <role-name>Admin</role-name> </auth-constraint> </security-constraint> <security-constraint> <web-resource-collection> <web-resource-name>All Users</web-resource-name> <url-pattern>/view/*</url-pattern> </web-resource-collection> <auth-constraint> <role-name>*</role-name> </auth-constraint> <user-data-constraint> <transport-guarantee>NONE</transport-guarantee> </user-data-constraint> </security-constraint> <!--  --> <listener> <listener-class>my.app.jaas.Initializer</listener-class> </listener> 


рдорд╛рд╡реЗрди рд╕реЗрдЯрдЕрдк: pom.xml рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдирд┐рд░реНрднрд░рддрд╛рдПрдБ


pom.xml рдЦреЛрд▓реЗрдВ рдФрд░ рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рдЬреЛрдбрд╝реЗрдВ:
  <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>4.0.1.Final</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.richfaces.core</groupId> <artifactId>richfaces-core-impl</artifactId> <version>4.2.2.Final</version> <scope>runtime</scope> </dependency> <dependency> <groupId>org.richfaces.ui</groupId> <artifactId>richfaces-components-ui</artifactId> <version>4.2.2.Final</version> <scope>runtime</scope> </dependency> <dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <version>1.6</version> </dependency> 


рдЬрд╛рд╡рд╛ рджреГрдврд╝рддрд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ


JPA рдХреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЧреБрдг рдЦреЛрд▓реЗрдВ рдФрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд╣рд▓реБрдУрдВ рдЕрдиреБрднрд╛рдЧ рдХреЛ рдвреВрдВрдвреЗрдВ, рдЗрд╕ рдЦрдВрдб рдореЗрдВ рдЖрдкрдХреЛ рдЬреЗрдкреАрдП рдХреЗ рд╡рд┐рдкрд░реАрдд рдмреЙрдХреНрд╕ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рджреГрдврд╝рддрд╛ред xml рдлрд╝рд╛рдЗрд▓ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдмрдирд╛рдИ рдЬрд╛рдПрдЧреАред рдЗрд╕рдХреЗ рдмрд╛рдж, рдЖрдк рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рддрдХ рдкрд╣реБрдБрдЪ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рдЖрдк рд╕реЗрдЯрд┐рдВрдЧ рдХреЛ hibernate.cfg.xml рдкрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВ рдмрд╛рдж рдХреЛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЧреНрд░рд╛рдлрд┐рдХрд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣рд╛рде рдореЗрдВ рд╣реИ, рдФрд░ рдПрдХ рдореМрдЬреВрджрд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рд░рд┐рд╡рд░реНрд╕ рдЗрдВрдЬреАрдирд┐рдпрд░рд┐рдВрдЧ рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рднреА рд╣реИред
рджреВрд╕рд░реА рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЪрд╛рд╣рд┐рдП:
- рджреГрдврд╝рддрд╛ рдореЗрдВред xml hibernate.cfg.xml рдХреЛ рджреЗрдЦреЗрдВ:
persistence.xml
 <?xml version="1.0" encoding="UTF-8"?> <persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> <persistence-unit name="test"> <properties> <property name="hibernate.ejb.cfgfile" value="/hibernate.cfg.xml" /> </properties> </persistence-unit> </persistence> 

- рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде src / main / resource рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ hibernate.cfg.xml рдлрд╝рд╛рдЗрд▓ рдЬреЛрдбрд╝реЗрдВ:
hibernate.cfg.xml
 <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory name=""> <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <property name="hibernate.format_sql">true</property> <property name="hibernate.show_sql">false</property> <property name="hibernate.hbm2ddl.auto">update</property> <property name="hibernate.connection.datasource">java:jboss/datasources/MysqlDS</property> </session-factory> </hibernate-configuration> 

Hibernate.hbm2ddl.auto рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ: рдЕрдкрдбреЗрдЯ рдореВрд▓реНрдп рдЖрдкрдХреЛ рдореЙрдбрд▓ рдХреЛ рдлрд┐рдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдпреЛрдЬрдирд╛ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдФрд░ рд╣рдореЗрдВ рдЗрд╕ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдХрд▓ DDL рд▓рд╛рдЗрди рдирд╣реАрдВ рд▓рд┐рдЦрдирд╛ рд╣реИ!
рдкреНрд░рд╛рд░реВрдк_sql рдФрд░ show_sql рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рд╕рдордп рдХрд╛рдо рдЖ рд╕рдХрддрд╛ рд╣реИ;
рд╕рддреНрд░ рдлреИрдХреНрдЯрд░реА рд╕рдВрдкрд╛рджрдХ рдХрд╛ рдмреБрдХрдорд╛рд░реНрдХ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЗрдВ рдЕрднреА рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреАред
рдЗрд╕ рдкрд░ рд╕реЗрдЯрд┐рдВрдЧ рдХреЛ рдкреВрд░реНрдг рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдбреЗрдЯрд╛ рдореЙрдбрд▓


рдбреЗрдЯрд╛ 2 рд╡рд░реНрдЧреЛрдВ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИрдВред рдХрдИ-рдХрдИ рд╕рдВрдмрдВрдзреЛрдВ рдХреЛ рджреЛрдиреЛрдВ рдкрдХреНрд╖реЛрдВ рджреНрд╡рд╛рд░рд╛ рд╕реЗрдЯ рдкрд░ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдХрдиреЗрдХреНрд╢рди рд╣реЛрд╕реНрдЯ AppUser рд╣реЛрдЧрд╛ (AppRole рд╢рд╛рдпрдж рд╣реА рдХрднреА рдмрджрд▓рддрд╛ рд╣реИ; рдпрд╣ рдПрдХ рдЗрдХрд╛рдИ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд╕рдВрджрд░реНрдн рд╣реИ)ред
рдЪреВрдВрдХрд┐ MySql рдореЗрдВ рдХреЛрдИ рд╕реАрдХреНрд╡реЗрдВрд╕ рдпрд╛ рдСрдЯреЛ-рдЗрдиреНрдХреНрд░реАрдореЗрдВрдЯ рдирд╣реАрдВ рд╣реИ, рдЬреЗрдирд░реЗрдЯрд░рдЯрд╛рдЗрдк.рдЯреЗрдмрд▓ рд░рдгрдиреАрддрд┐ рдЬрдирд░реЗрдЯрд░ рдХреЗ рд▓рд┐рдП рдЪреБрдиреА рдЬрд╛рддреА рд╣реИред рдмрд╛рдХреА, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рдПрдиреЛрдЯреЗрд╢рди рд╕реЗ рд╕реНрдкрд╖реНрдЯ рд╣реИред
AppUser.java
 import java.util.*; import javax.persistence.*; @ Entity @ Table(name = "APP_USER", uniqueConstraints = @ UniqueConstraint(columnNames = "USER_NAME")) public class AppUser implements java.io.Serializable { private Long userId; private String userName; private String displayName; private String pwd; private Boolean enabled; private Set<AppRole> roles = new HashSet<AppRole>(0); @ TableGenerator( name = "UserIdGen", table = "APP_GEN", pkColumnName = "GEN_NAME", pkColumnValue = "USER_ID", valueColumnName = "GEN_VAL", allocationSize = 10) @ Id @ Column(name = "USER_ID", nullable = false) @ GeneratedValue(strategy=GenerationType.TABLE, generator="UserIdGen") public Long getUserId() { return this.userId; } public void setUserId(Long userId) { this.userId = userId; } @ Column(name = "USER_NAME", nullable = false, length = 30) public String getUserName() { return this.userName; } public void setUserName(String userName) { this.userName = userName; } @ Column(name = "DISPLAY_NAME", length = 250) public String getDisplayName() { return this.displayName; } public void setDisplayName(String displayName) { this.displayName = displayName; } @ Column(name = "PWD", length = 30) public String getPwd() { return this.pwd; } public void setPwd(String pwd) { this.pwd = pwd; } @ Column(name = "ENABLED") public Boolean getEnabled() { return this.enabled; } public void setEnabled(Boolean enabled) { this.enabled = enabled; } @ ManyToMany(fetch = FetchType.LAZY, cascade=CascadeType.ALL) @ JoinTable( name = "APP_MEMBERSHIP", joinColumns = { @ JoinColumn(name = "USER_ID", nullable = false, updatable = false) }, inverseJoinColumns = { @ JoinColumn(name = "ROLE_ID", nullable = false, updatable = false) }) public Set<AppRole> getRoles() { return this.roles; } public void setRoles(Set<AppRole> roles) { this.roles = roles; } } 

рдкрд╛рд╕рд╡рд░реНрдб рдХреА рд▓рдВрдмрд╛рдИ 30 рд╣реИ: рдпрд╣ рдмреЗрд╕ 64 рдПрдирдХреЛрдбрд┐рдВрдЧ рдореЗрдВ SHA-1 рдбрд╛рдЗрдЬреЗрд╕реНрдЯ (20 рдмрд╛рдЗрдЯреНрд╕) рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП;
рд╕рдХреНрд╖рдо рдлрд╝реАрд▓реНрдб рдХреЗ рд▓рд┐рдП, рдмреВрд▓рд┐рдпрди рдкреНрд░рдХрд╛рд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рди рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рд╕рд░реНрд╡рд░ рдЗрд╕реЗ рд╕рдордЭреЗрдЧрд╛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдлрд╛рдпрд░рдмрд░реНрдбрдХреНрдпреВрдПрд╕рдХреНрдпреВрдПрд▓ рдореЗрдВ рдЖрдкрдХреЛ рдЗрд╕ рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рдбреЛрдореЗрди рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛), рд▓реЗрдХрд┐рди MySql рдЗрд╕реЗ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдкреНрд░рд╢реНрди рдХреЗ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рддрд╛ рд╣реИред
AppRole.java
 import java.util.*; import javax.persistence.*; @ Entity @ Table(name = "APP_ROLE", uniqueConstraints = @ UniqueConstraint(columnNames = "ROLE_NAME")) public class AppRole implements java.io.Serializable { private Long roleId; private String roleName; private String displayName; private Set<AppUser> users = new HashSet<AppUser>(0); @ TableGenerator( name = "RoleIdGen", table = "APP_GEN", pkColumnName = "GEN_NAME", pkColumnValue = "ROLE_ID", valueColumnName = "GEN_VAL", allocationSize = 10) @ Id @ Column(name = "ROLE_ID", nullable = false) @ GeneratedValue(strategy=GenerationType.TABLE, generator="RoleIdGen") public Long getRoleId() { return this.roleId; } public void setRoleId(Long roleId) { this.roleId = roleId; } @ Column(name = "ROLE_NAME", length = 30) public String getRoleName() { return this.roleName; } public void setRoleName(String roleName) { this.roleName = roleName; } @ Column(name = "DISPLAY_NAME", length = 250) public String getDisplayName() { return this.displayName; } public void setDisplayName(String displayName) { this.displayName = displayName; } @ ManyToMany(fetch = FetchType.LAZY, mappedBy = "roles") public Set<AppUser> getUsers() { return this.users; } public void setUsers(Set<AppUser> users) { this.users = users; } } 

рдпрджрд┐ рд╡рд╛рдВрдЫрд┐рдд рд╣реИ, рддреЛ рдЖрдк рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП AppGen рд╡рд░реНрдЧ рднреА рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ APP_GEN рдЬрдирд░реЗрдЯрд░ рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрдЧрд╛, рддрд╛рдХрд┐ рд╣рдорд╛рд░рд╛ рдЖрд╡реЗрджрди рд╡рд┐рд░рд╛рд╕рдд SQL рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХреЗред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдПрдХ рдлрд╝реАрд▓реНрдб APP_GEN рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдмрдирд╛рдИ рдЬрд╛рдПрдЧреА - 256 рдХреБрдВрдЬреА рдХреА рд▓рдВрдмрд╛рдИ рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рдердорд┐рдХ рдХреБрдВрдЬреА GEN_NAME, рдЬреЛ рд╣рдореЗрд╢рд╛ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рдФрд░ рдПрдиреЛрдЯреЗрд╢рди рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдХреЗ рдЗрд╕ рд▓рдВрдмрд╛рдИ рдХреЛ рдХрдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдореЗрд░реЗ рд▓рд┐рдП, 30 рд╡рд░реНрдг рдкрд░реНрдпрд╛рдкреНрдд рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдУрд░реЗрдХрд▓ рдореЗрдВ рдЕрдиреБрдХреНрд░рдо рдирд╛рдореЛрдВ рдХреА рд▓рдВрдмрд╛рдИ)ред

рдЖрд╡реЗрджрди рдЖрд░рдВрднреАрдХрд░рдг


рдЖрд╡реЗрджрди рдХреЛ рдЖрд░рдВрднрд┐рдХ рдХрдХреНрд╖рд╛ my.app.jaas.Initializer рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рд░рдВрдн рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬреЛ рдкрд╣рд▓реЗ web.xml рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛
Initializer.java
 @ ManagedBean public class Initializer implements ServletContextListener { private static final Logger log = Logger.getLogger(Initializer.class); @Override public void contextDestroyed(ServletContextEvent event) {} @Override public void contextInitialized(ServletContextEvent event) { loadData(); } @ PersistenceContext EntityManager em; private AppRole checkRole(String roleName, String displayName, Session session) { AppRole role = (AppRole)session.createCriteria(AppRole.class) .add(Restrictions.eq("roleName", roleName)) .uniqueResult(); if (role == null) { role = new AppRole(); role.setRoleName(roleName); role.setDisplayName(displayName); session.save(role); } return role; } private void loadData() { Session session = (Session) em.getDelegate(); AppRole adminRole = checkRole("Admin", "", session); checkRole("Manager", "", session); if (adminRole.getUsers().size()==0) { AppUser user = (AppUser)session.createCriteria(AppUser.class) .add(Restrictions.eq("userName", "admin")) .uniqueResult(); if(user==null) { user = new AppUser(); user.setUserName("admin"); user.setDisplayName(""); user.setPwd(encode("topsecret")); user.setEnabled(true); session.save(user); } adminRole.getUsers().add(user);//nothing user.getRoles().add(adminRole); session.save(adminRole); session.save(user); } session.flush(); session.close(); } public static String encode(String value) { //get the message digest try{ MessageDigest md = MessageDigest.getInstance("SHA"); //SHA-1 algorithm md.update(value.getBytes("UTF-8")); //byte-representation using UTF-8 encoding format byte raw[] = md.digest(); String hash = Base64.encodeBase64String(raw).trim(); return hash; } catch(Exception e) { log.error(e, e); } return value; } public String logout() { FacesContext ctx = FacesContext.getCurrentInstance(); HttpSession session = (HttpSession)ctx.getExternalContext().getSession(false); session.invalidate(); return("logout"); } } 

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдХреЗрд╡рд▓ рд╢реНрд░реЛрддрд╛ рд╡рд┐рдзрд┐ ServletContextListener.contextInitialized рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рднреВрдорд┐рдХрд╛рдПрдБ рдЬрд╛рдБрдЪреА рдЬрд╛рддреА рд╣реИрдВ рдФрд░ рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИрдВ, рдФрд░ рдХрдо рд╕реЗ рдХрдо 1 рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдХреА рдЬрд╛рдБрдЪ рдХреА рдЬрд╛рддреА рд╣реИред рдпрджрд┐ рдХреЛрдИ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдирд╣реАрдВ рд╣реИ, рддреЛ рдПрдХ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдЦрд╛рддрд╛ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рдмрдВрдзрди рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд╕реНрдерд┐рд░ рдПрдиреНрдХреЛрдб рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд╣рдореЗрдВ рдПрдХ рдФрд░ 1 рд▓реЙрдЧрдЖрдЙрдЯ () рд╡рд┐рдзрд┐ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдПрдХ рд╕реНрдкрд╖реНрдЯ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд╕рд╛рдеред
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЬреЗрдкреАрдП рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдирд┐рдЪрд▓реЗ рд╕реНрддрд░ рддрдХ - рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рдПрдкреАрдЖрдИ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдЖрдк рдЕрджреНрднреБрдд org.hibernate.Criteria рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ sql, hql рдпрд╛ jpql рдореЗрдВ рдПрдХ рднреА рд▓рд╛рдЗрди рдХреЗ рдмрд┐рдирд╛ рд╕рднреА рдХреНрд░рд┐рдпрд╛рдПрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдкреНрд░рдкрддреНрд░


login.xhtml
 <html xmlns="http://www.w3.org/1999/xhtml" xmlns:a4j="http://richfaces.org/a4j" xmlns:rich="http://richfaces.org/rich" xmlns:f="http://java.sun.com/jsf/core" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:h="http://java.sun.com/jsf/html"> <h:head> <title>  </title> <h:outputStylesheet> div.login-container { width: 255px; position: relative; margin: 0 auto 0 auto; } </h:outputStylesheet> </h:head> <h:body> <div class="login-container" id="login_container"> <rich:panel> <f:facet name="header"> <h:outputText value="  " /> </f:facet> <form method="post" action="j_security_check" name="loginform" id="loginForm" target="_parent"> <h:panelGrid columns="2" cellpadding="2" columnClasses="right,left" width="100%"> <h:outputLabel for="j_username" value=":" /> <h:inputText style="width: 155px;" id="j_username" value="" /> <h:outputLabel for="j_password" value=":" /> <h:inputSecret style="width: 155px;" id="j_password" value="" /> <h:panelGroup /> <h:panelGroup /> <h:panelGroup /> <h:panelGroup> <h:commandButton name="login" id="login-submit" value="" /> <h:outputText value=" " escape="false"/> <h:commandButton type="button" id="login-cancel" value="" /> </h:panelGroup> </h:panelGrid> </form> </rich:panel> </div> <h:outputScript> (function(){ jQuery("#login_container").offset({top:Math.max(0,(jQuery(window).height()/2)-150)}); var el = jQuery("#j_username").get(0);el.focus();el.select(); })(); </h:outputScript> </h:body> </html> 

рдпрд╣рд╛рдВ рдЖрдк рдХрд┐рд╕реА рднреА рдЖрдХрд╛рд░ рдХреЛ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХреЗрд╡рд▓ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдпрд╣ рд╣реИ рдХрд┐ j_username рдФрд░ j_password рдХреЗ рдорд╛рди рд╕рд░реНрд╡рд░ рдкрд░ рд╕рдмрдорд┐рдЯ рдХрд┐рдП рдЬрд╛рдПрдВред рдЪреВрдВрдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд░рд┐рдЪрдлрд╕ рдШрдЯрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, jQuery рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкреЗрдЬ рдХреЛрдб рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд▓реЙрдЧрд┐рди-рдХрдВрдЯреЗрдирд░ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдХреЗ рд╕рд╛рде рддрддреНрд╡ рдХрд╛ рдЪрдпрди рдХрд░рддрд╛ рд╣реИред

рддреЛ, рдкрд╣рд▓реЗ рд▓реЙрдиреНрдЪ рдХреЗ рд▓рд┐рдП рд╕рдм рдХреБрдЫ рддреИрдпрд╛рд░ рд╣реИред рдЗрд╕рдХреЗ рдмрд╛рдж, рд╣рдо рдХрд┐рд╕реА рднреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╡реЗрдмреИрдк / рд╡реНрдпреВ, рд╡реЗрдмрдПрдк / рдПрдбрдорд┐рди рдореЗрдВ рдбрд╛рд▓рддреЗ рд╣реИрдВ, рд╕рд░реНрд╡рд░ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╣рдо рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЗрди рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рддрдХ рдкрд╣реБрдВрдЪ рдХреЗрд╡рд▓ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЗ рдмрд╛рдж рд╣реА рд╕рдВрднрд╡ рд╣реИ рдФрд░ рдпрджрд┐ рд╕рдВрдмрдВрдзрд┐рдд рднреВрдорд┐рдХрд╛рдПрдВ рд╣реИрдВред
рдЬрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЖрд╡рд╢реНрдпрдХ рдЯреЗрдмрд▓ рдФрд░ рд░рд┐рдХреЙрд░реНрдб рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдмрдирд╛рдП рдЬрд╛рдПрдВрдЧреЗ, рдЖрдк рдЗрд╕реЗ phpmyadmin рдХрд╛рд░рддреВрд╕ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдХреЗ рдпрд╛ hibernate.cfg.xml рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХреНрд╡реЗрд░реА рдЯреНрд░реЗрд╕рд┐рдВрдЧ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдХреЗ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
  <property name="hibernate.show_sql">false</property> 


рдирд┐рд╖реНрдХрд░реНрд╖


рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдиреЗ рдУрдкрдирд╢рд┐рдлреНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреА рдЬрд╛рдВрдЪ рдХреАред рдПрдХ рд╣реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдХрд┐рд╕реА рднреА рдЕрдиреНрдп JBoss AS 7.1 рд╕рд░реНрд╡рд░ рдкрд░ рд╕рдВрдХрд▓рд┐рдд рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдХрд┐рд╕реА рднреА рд╕рдорд░реНрдерд┐рдд sql рдмреЛрд▓рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рдеред рдЕрдВрддрд░ рдХреЗрд╡рд▓ рд╕реНрдЯреИрдВрдбрдЕрд▓реЛрди.рдПрдХреНрд╕рдПрдордПрд▓ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕реНрдерд╛рди рдореЗрдВ рд╣реЛрдЧрд╛, рдФрд░ рд╡рд╛рдВрдЫрд┐рдд рдЬреЗрдбрдбреАрдмреАрд╕реА рдореЙрдбреНрдпреВрд▓ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рд╕реЗ рдХрдиреЗрдХреНрд╢рди рд╕реЗрдЯ рдХрд░рддреЗ рд╕рдордп, рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХреЛ рдпрд╛рдж рд░рдЦреЗрдВред
рдЗрд╕ рдЯреЗрдореНрдкрд▓реЗрдЯ рдиреЗ рд▓реЛрдб рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдиреНрдпреВрдирддрдо рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рдЬреЛ рдХрд┐ рдУрдкрдирд╢рд┐рдлреНрдЯ рдПрдХреНрд╕рдкреНрд░реЗрд╕ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рд╕реАрдорд┐рдд рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдЕрдзрд┐рдХрддрд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдореЙрдбреНрдпреВрд▓ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА JBoss рд╡рд┐рддрд░рдг рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк - рдбрд┐рд╕реНрдХ рд╕реНрдерд╛рди рдФрд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдкреНрд░рдХрд╛рд╢рди рд╕рдордп рдХреА рдмрдЪрддред

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


All Articles