рд╕рднреА рдХреЛ рд╢реБрдн рджрд┐рдиред рдЬреИрд╕рд╛ рдХрд┐ рд╡рд╛рджрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдореИрдВ
ZK рдлреНрд░реЗрдорд╡рд░реНрдХ рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рд╡рд┐рд╖рдп рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реВрдВрдЧрд╛ред рднрд╛рдЧ рдПрдХ рдХреНрдпреЛрдВ рд╣реИ? рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдЖрдкрдХреЛ jsp рдкреЗрдЬ рдХреЛ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдкреЗрдЬ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ
рд╕реНрдкреНрд░рд┐рдВрдЧ рд╕рд┐рдХреНрдпреЛрд░рд┐рдЯреА рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рддреЗрдЬ рдФрд░ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рджрд┐рдЦрд╛рдКрдВрдЧрд╛; рдмрд╛рдж рдХреЗ рд▓реЗрдЦ рдореЗрдВ, рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рддрд░реАрдХреЛрдВ рдХреЛ рдПрдХ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдкреГрд╖реНрда рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╝реВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рд╣рдордиреЗ рд╕реНрдХреНрд░реИрдЪ рд╕реЗ рдПрдХ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдирд╣реАрдВ рд▓рд┐рдЦрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдЖрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗ рд▓реЛ рдореЗрд░реЗ рдкрд┐рдЫрд▓реЗ рдЖрд╡реЗрджрди, рдЬреЛ рдореИрдВрдиреЗ
рдЗрд╕ рд╡рд┐рд╖рдп рдореЗрдВ рд╡рд░реНрдгрд┐рдд
рдХрд┐рдпрд╛ рд╣реИ ред
рд╣рдореЗрдВ рдХреНрдпрд╛ рдЪрд╛рд╣рд┐рдП:
рдпрд╣ рд╡рд┐рдзрд┐ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЛрдВ рд╕реЗ рднреА рд▓рд╛рдЧреВ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ, рдпрд╛ рддреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ, рдЙрдирдХреЗ рдкрд╛рд╕рд╡рд░реНрдб рдФрд░ рд╕реНрдкреНрд░рд┐рдВрдЧ рд╕реБрд░рдХреНрд╖рд╛ xml рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдХреЗ рдпрд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдХреЗред рдЪреВрдВрдХрд┐ рд╣рдорд╛рд░рд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдУрд░реЗрдХрд▓ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рддрд╛рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдирд╣реАрдВ рд╣реЛрдВрдЧреЗред рдЬреИрд╕рд╛ рдХрд┐ рд╡рд╕рдВрдд рдкреНрд░рд▓реЗрдЦрди рд╣рдореЗрдВ рдмрддрд╛рддрд╛ рд╣реИ, рдПрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдХреЗ рджреМрд░рд╛рди, рд╕реНрдкреНрд░рд┐рдВрдЧ рд╕реБрд░рдХреНрд╖рд╛ 2 рддрд╛рд▓рд┐рдХрд╛рдУрдВ (рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдФрд░ рдЕрдзрд┐рдХрд╛рд░рд┐рдпреЛрдВ) рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рджреЗрдЦрддрд╛ рд╣реИред рд╕рдореВрд╣ рдиреАрддрд┐ рдХреЗ рд╕рд╛рде, рдЗрд╕ рддрд░рд╣ рдХреА рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ: рд╕рдореВрд╣, group_authorities, group_members рдЖрд╡рд╢реНрдпрдХ рд╣реИрдВ (рддрд╛рд▓рд┐рдХрд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ
рдпрд╣рд╛рдВ рд╕реЗ рд▓реА рдЬрд╛ рд╕рдХрддреА
рд╣реИрдВ )ред
рддреЛ рд╣рдо рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдлреЙрд░реНрдо рдХреЗ 2 рдЯреЗрдмрд▓ рдмрдирд╛рддреЗ рд╣реИрдВ:
CREATE TABLE users ( username varchar2 (50) NOT NULL PRIMARY KEY, password varchar2 (50) NOT NULL, enabled number NOT NULL );
CREATE TABLE authorities ( username varchar2 (50) NOT NULL, authority varchar2 (50) NOT NULL, CONSTRAINT fk_authorities_users FOREIGN KEY (username) REFERENCES users (username) ); CREATE UNIQUE INDEX ix_auth_username ON authorities (username, authority);
рдЕрдЧрд▓рд╛ рдХрджрдо рд╣рдорд╛рд░реА рд╕реНрдкреНрд░рд┐рдВрдЧ рд╕рд┐рдХреНрдпреЛрд░рд┐рдЯреА рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рд╣реИред рд╕реНрдкреНрд░рд┐рдВрдЧ- config.xml рдлрд╝рд╛рдЗрд▓ рдореЗрдВ, рдирд┐рдореНрди рдкрд░рд┐рд╡рд░реНрддрди рдХрд░реЗрдВ
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:security="http://www.springframework.org/schema/security" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.1.xsd"> <context:annotation-config /> <context:component-scan base-package="com.sample" /> <tx:annotation-driven transaction-manager="txManager" /> <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> <property name="jndiName"> <value>java:comp/env/jdbc/taskdb</value> </property> </bean> <bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="dataSource" ref="dataSource" /> <property name="sessionFactory" ref="sessionFactory" /> </bean> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> <property name="dataSource"> <ref bean="dataSource" /> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">org.hibernate.dialect.OracleDialect</prop> <prop key="hibernate.show_sql">false</prop> </props> </property> <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" /> <property name="configLocation" value="/WEB-INF/hibernate.cfg.xml" /> </bean> <security:global-method-security secured-annotations="enabled" jsr250-annotations="enabled" />
<security:http auto-config="true"> <security:intercept-url pattern="/login.jsp" access="IS_AUTHENTICATED_ANONYMOUSLY" /> <security:intercept-url pattern="/**" access="ROLE_ADMIN,ROLE_USER" /> <security:form-login login-page="/login.jsp" default-target-url="/index.zul" always-use-default-target="true" authentication-failure-url="/login.jsp?login_error=1" /> <security:logout logout-url="/j_spring_security_logout" invalidate-session="true" logout-success-url="/logoutSuccess.jsp" /> </security:http> <security:authentication-manager> <security:authentication-provider> <security:jdbc-user-service data-source-ref="dataSource" /> </security:authentication-provider> </security:authentication-manager> </beans>
рдореИрдВ рдХреБрдЫ рдмрд┐рдВрджреБрдУрдВ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдиреНрджреНрд░рд┐рдд рдХрд░реВрдВрдЧрд╛:
<security:global-method-security
secured-annotations="enabled" jsr250-annotations="enabled" />
<security:global-method-security
secured-annotations="enabled" jsr250-annotations="enabled" />
- рд╣рдореЗрдВ рдлрд╝реЙрд░реНрдо рдХреЗ рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ @RolesAllowed ("ROLE_ADMIN") , рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреЗ рд╕рдореВрд╣ рдХреЗ рд▓рд┐рдП рдпрд╣ рд▓рд╛рдЗрди @RolesAllowed ({"ROLE_ADMIN", "ROLE_USER) рдХреА рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧреАред });<security:intercept-url pattern="/login.jsp"
access="IS_AUTHENTICATED_ANONYMOUSLY" />
<security:intercept-url pattern="/login.jsp"
access="IS_AUTHENTICATED_ANONYMOUSLY" />
- рд╣рдо рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╕рднреА рд▓реЛрдЧ login.jsp рдкреГрд╖реНрда рдкрд░ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ;<security:intercept-url pattern="/**"
access="ROLE_ADMIN,ROLE_USER" />
<security:intercept-url pattern="/**"
access="ROLE_ADMIN,ROLE_USER" />
- рдХреЗрд╡рд▓ рдРрд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЬрд┐рдирдХреЗ рдкрд╛рд╕ ROLE_ADMIN рдФрд░ / рдпрд╛ ROLE_USER рдХреЗ рдЕрдзрд┐рдХрд╛рд░ рд╣реИрдВ, рд╡реЗ рд╕рднреА рдкреГрд╖реНрдареЛрдВ рдкрд░ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ<security:form-login login-page="/login.jsp"
default-target-url="/index.zul" always-use-default-target="true"
authentication-failure-url="/login.jsp?login_error=1" />
<security:form-login login-page="/login.jsp"
default-target-url="/index.zul" always-use-default-target="true"
authentication-failure-url="/login.jsp?login_error=1" />
- рд╕рд╣реА рд▓реЙрдЧрд┐рди / рдкрд╛рд╕рд╡рд░реНрдб рдХреЗ рд╕рд╛рде, index.zul рдкреГрд╖реНрда рдкрд░ рдЬрд╛рдПрдВ (рдмреЗрд╢рдХ, рдпрджрд┐ рдЗрд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЕрдзрд┐рдХрд╛рд░ рдЗрд╕рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ), рдЕрдиреНрдпрдерд╛ рд╣рдо рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЛрдб рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ web.xml рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рди рднреВрд▓реЗрдВ:
<filter> <filter-name>springSecurityFilterChain</filter-name> <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> </filter> <filter-mapping> <filter-name>springSecurityFilterChain</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
рд╕рдм рдХреБрдЫ рд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдм рд╣рдо login.jsp рд▓реЙрдЧрд┐рди рдкреЗрдЬ рд▓рд┐рдЦреЗрдВрдЧреЗред
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <%@ taglib prefix='c' uri='http://java.sun.com/jstl/core_rt'%> <html> <head> <title> </title> <style type="text/css"> body { background: #63bad8 50% 0px repeat-x; text-align: center; } div.main { margin: 50px auto; padding: 0 0 0 0; width: 340px; border-color: black; } </style> </head> <body> <div class="main"> <h1 style="background-color: #3F3F3F; color: white; padding: 0px; margin: 0px;"></h1> <div style="background: white; border: black; padding: 0px; margin: 0px;" align="center" dir="ltr"> <c:if test="${not empty param.login_error}"> <font color="red"> . .</font> </c:if> <form name="f" action="<c:url value='j_spring_security_check'/>" method="POST" style="background: white;"> <table> <tr> <td style="font-style: oblique">:</td> <td><input type='text' name='j_username' value='<c:if test="${not empty param.login_error}"><c:out value="${SPRING_SECURITY_LAST_USERNAME}"/></c:if>' /> </td> </tr> <tr> <td style="font-style: oblique">:</td> <td><input type='password' name='j_password'> </td> </tr> <tr align="center"> <td colspan='2' align="center"><input name="submit" value="" type="submit"> <input name="reset" value="" type="reset"> </td> </tr> </table> </form> </div> </div> </body> </html>
рдЖрдк рджреМрдбрд╝рдХрд░ рд╣рдорд╛рд░реЗ рдлрд▓реЛрдВ рдХреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред
рдЪрд▓реЛ рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреЗ рднреЗрджрднрд╛рд╡ рдХреЗ рд╕рд╛рде рдЦреЗрд▓рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рд╕рд┐рд╕реНрдЯрдо рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ ROLE_ADMIN рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╣рдЯрд╛рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реЗ рдкрд╣рд▓реЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛ (
PersonalImpl ) рдореЗрдВ, рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓рд┐рдЦрддреЗ рд╣реИрдВ:
@RolesAllowed("ROLE_ADMIN")
public boolean delete(Person pers)
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдореЗрдВ рд▓реЙрдЧ рдЗрди рдХрд╛ рдирд╛рдо рднреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдИрдбреА = "рд▓реЗрдмрд▓рд▓реЙрдЧрд┐рди" рдХреЗ рд╕рд╛рде рд▓реЗрдмрд▓ рдШрдЯрдХ рдмрдирд╛рдПрдВ, рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдФрд░ рдЯреВрд▓рдмрд╛рд░рдмрдЯрди рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░реЗрдЧрд╛, рдЬреЛ рд╣рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд┐рдХрд╛рд╕ рдмрдЯрди рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред
Index.zul рдлрд╝рд╛рдЗрд▓ рдореЗрдВ
, рд▓рд╛рдЗрди рд╕реЗ рдкрд╣рд▓реЗ
<listbox id="lbPerson" hflex="1" vflex="1" checkmark="true"
, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬреЛрдбрд╝реЗрдВ:
<toolbar> <label id="labelLogin"/> / <toolbarbutton label="" href="/j_spring_security_logout"/> </toolbar>
рдареАрдХ рд╣реИ,
рд╡реНрдпрдХреНрддрд┐рдЗрдиреНрдлреЛ рд╡рд░реНрдЧ рдореЗрдВ, рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╢реВрдиреНрдп
onCreate () рд╡рд┐рдзрд┐ рдХреЗ рдЕрдВрджрд░, рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ:
UserDetails userDetails = (UserDetails) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); ((Label) this.getFellow("labelLogin")).setValue(userDetails.getUsername());
рдЗрд╕ рдХреЛрдб рдореЗрдВ, рд╣рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд╕рднреА рдбреЗрдЯрд╛
рдорд┐рд▓рддреЗ рд╣реИрдВ рдЬреЛ
UserDetails рдФрд░ рд▓реЗрдмрд▓ рдШрдЯрдХ рдореЗрдВ id = "labelLogin" рдХреЗ рд░реВрдк рдореЗрдВ index.zul рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдкрд╛рд╕ рдХрд░реЗрдВрдЧреЗред
рдЕрдм, рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХрд╛ рд╢реБрднрд╛рд░рдВрдн рдХрд░рдХреЗ, рдкрд░
http:
рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рд╣рдо login.jsp рдкреГрд╖реНрда рдкрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рд╣реЛ рдЧрдП рдереЗред