ssh实现的包含acegi的项目框架(注释少)

ssh实现的包含acegi的项目框架(注释少)

一.Hibernate持久化层
1.model:
a.User.java

package  com.witbridge.payroll.model;

import  java.io.Serializable;
import  java.util.ArrayList;
import  java.util.List;

import  org.acegisecurity.GrantedAuthority;
import  org.acegisecurity.userdetails.UserDetails;

@SuppressWarnings(
" unchecked " )
public   class  User  implements  Serializable, UserDetails  {
    
private static final long serialVersionUID = 2289410331437985768L;
    
    
private Integer id;
    
private String username;
    
private String password;
    
private String email;
    
private boolean enabled;
    
private boolean accountExpired;
    
private boolean accountLocked;
    
private boolean credentialsExpired;
    
private Integer associateId;
    
private List roles = new ArrayList();
    
    
//~============================getter & settter
    public Integer getId() {
        
return id;
    }


    
public void setId(Integer id) {
        
this.id = id;
    }

    
    
public boolean isAccountExpired() {
        
return accountExpired;
    }


    
public void setAccountExpired(boolean accountExpired) {
        
this.accountExpired = accountExpired;
    }


    
public boolean isAccountLocked() {
        
return accountLocked;
    }


    
public void setAccountLocked(boolean accountLocked) {
        
this.accountLocked = accountLocked;
    }


    
public boolean isCredentialsExpired() {
        
return credentialsExpired;
    }


    
public void setCredentialsExpired(boolean credentialsExpired) {
        
this.credentialsExpired = credentialsExpired;
    }


    
public void setEnabled(boolean enabled) {
        
this.enabled = enabled;
    }


    
public void setPassword(String password) {
        
this.password = password;
    }


    
public void setUsername(String username) {
        
this.username = username;
    }

    
    
public String getEmail() {
        
return email;
    }


    
public void setEmail(String email) {
        
this.email = email;
    }

    
    
public List getRoles() {
        
return roles;
    }


    
public void setRoles(List roles) {
        
this.roles = roles;
    }


    
public void addRole(Role role) {
        roles.add(role);
    }

    
    
public GrantedAuthority[] getAuthorities() {
        
return (GrantedAuthority[]) roles.toArray(new GrantedAuthority[0]);
    }


    
public String getPassword() {
        
return password;
    }


    
public String getUsername() {
        
return username;
    }


    
public boolean isAccountNonExpired() {
        
return !isAccountExpired();
    }


    
public boolean isAccountNonLocked() {
        
return !isAccountLocked();
    }


    
public boolean isCredentialsNonExpired() {
        
return !isCredentialsExpired();
    }


    
public boolean isEnabled() {
        
return enabled;
    }


    
public Integer getAssociateId() {
        
return associateId;
    }


    
public void setAssociateId(Integer associateId) {
        
this.associateId = associateId;
    }

}


Role.java
package  com.witbridge.payroll.model;

import  java.io.Serializable;

import  org.acegisecurity.GrantedAuthority;


public   class  Role  implements  Serializable, GrantedAuthority  {
    
    
private static final long serialVersionUID = -3187100981785730494L;
    
    
private Integer id;
    
private String name;
    
    
//~=================================Constructor
    public Role() {
    }

    
public Role(Integer id, String name) {
        
this.id = id;
        
this.name = name;
    }

    
    
//~=================================getter & setter
    public Integer getId() {
        
return id;
    }

    
public void setId(Integer id) {
        
this.id = id;
    }

    
public String getName() {
        
return name;
    }

    
public void setName(String name) {
        
this.name = name;
    }

    
    
public String getAuthority() {
        
return name;
    }

}


UserRole:
package  com.witbridge.payroll.model;

import  java.io.Serializable;

public   class  UserRole  implements  Serializable  {
    
private static final long serialVersionUID = 3627077608786533159L;

    
private Integer userId;
    
private Integer roleId;

    
public Integer getRoleId() {
        
return roleId;
    }


    
public void setRoleId(Integer roleId) {
        
this.roleId = roleId;
    }


    
public Integer getUserId() {
        
return userId;
    }


    
public void setUserId(Integer userId) {
        
this.userId = userId;
    }


}


测试的Demo:Person.java
package  com.witbridge.payroll.model;

public   class  Person  {
   
private Integer id;
   
private String username;
   
private String password;

public Integer getId() {
    
return id;
}

public void setId(Integer id) {
    
this.id = id;
}

public String getPassword() {
    
return password;
}

public void setPassword(String password) {
    
this.password = password;
}

public String getUsername() {
    
return username;
}

public void setUsername(String username) {
    
this.username = username;
}

   
}



2.Hibernate映射文件
0.数据源的配置

<? xml version = " 1.0 "  encoding = " UTF-8 " ?>
<! DOCTYPE beans PUBLIC  " -//SPRING//DTD BEAN//EN "   " http://www.springframework.org/dtd/spring-beans.dtd " >

< beans >
    
<!--  DataSource definition  -->
    
< bean id = " dataSource "   class = " org.apache.commons.dbcp.BasicDataSource "  destroy - method = " close " >
        
< property name = " driverClassName "  value = " COM.ibm.db2.jdbc.net.DB2Driver "   />
        
< property name = " url "  value = " jdbc:db2:192.168.0.120:payrolla "   />
        
< property name = " username "  value = " db2admin "   />
        
< property name = " password "  value = " db2admin "   />
    
</ bean >
    
<!--   
    
< bean id = " dataSource "   class = " org.apache.commons.dbcp.BasicDataSource "  destroy - method = " close " >
        
< property name = " driverClassName "  value = " com.mysql.jdbc.Driver "   />
        
< property name = " url "  value = " jdbc:mysql://localhost:3306/payroll1 "   />
        
< property name = " username "  value = " root "   />
        
< property name = " password "  value = " root "   />
    
</ bean >
    
-->
    
<!--  Hibernate SessionFactory  -->
    
< bean id = " sessionFactory "   class = " org.springframework.orm.hibernate3.LocalSessionFactoryBean " >
        
< property name = " dataSource "  ref = " dataSource "   />
        
< property name = " mappingDirectoryLocations " >
            
< list >      < value > classpath: / com / witbridge / payroll / hbm </ value >      </ list >
        
</ property >
        
< property name = " hibernateProperties " >
            
< props >     
                
< prop key = " hibernate.dialect " > org.hibernate.dialect.DB2Dialect </ prop >
                
< prop key = " hibernate.show_sql " > true </ prop >
            
</ props >
        
</ property >
    
</ bean >

    
<!--  Transaction manager  for  a single Hibernate SessionFactory  -->
    
< bean id = " transactionManager "   class = " org.springframework.orm.hibernate3.HibernateTransactionManager " >
        
< property name = " sessionFactory "  ref = " sessionFactory "   />
    
</ bean >
    
</ beans >




a.user.hbm

<? xml version = " 1.0 "  encoding = " UTF-8 " ?>
<! DOCTYPE hibernate - mapping PUBLIC  " -//Hibernate/Hibernate Mapping DTD 3.0//EN "   " http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd "   >
< hibernate - mapping  package = " com.witbridge.payroll.model " >
    
< class  name = " User "  table = " user "  lazy = " false " >
        
< id name = " id "  column = " id " >
            
< generator  class = " identity "   />
        
</ id >
        
        
< property name = " username "  column = " username "   />
        
< property name = " password "  column = " password "   />
        
< property name = " email "  column = " email "   />
        
< property name = " enabled "  column = " enabled "   />
        
< property name = " accountExpired "  column = " account_expired "   />
        
< property name = " accountLocked "  column = " account_locked "   />
        
< property name = " credentialsExpired "  column = " credentials_expired "   />
        
< property name = " associateId "  column = " associate_id " ></ property >
    
</ class >
</ hibernate - mapping >

b.role.hbm

<? xml version = " 1.0 "  encoding = " UTF-8 " ?>
<! DOCTYPE hibernate - mapping PUBLIC  " -//Hibernate/Hibernate Mapping DTD 3.0//EN "   " http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd "   >
< hibernate - mapping  package = " com.witbridge.payroll.model " >
    
< class  name = " Role "  table = " role "  lazy = " false " >
        
< id name = " id "  column = " id " >
            
< generator  class = " native "   />
        
</ id >
        
        
< property name = " name "  column = " name "   />

    
</ class >
</ hibernate - mapping >

c.user_role.hbm

<? xml version = " 1.0 "  encoding = " UTF-8 " ?>
<! DOCTYPE hibernate - mapping PUBLIC  " -//Hibernate/Hibernate Mapping DTD 3.0//EN "   " http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd "   >
< hibernate - mapping  package = " com.witbridge.payroll.model " >
    
< class  name = " UserRole "  table = " user_role "  lazy = " false " >
        
< composite - id >
            
< key - property name = " userId "  column = " user_id " />
            
< key - property name = " roleId "  column = " role_id " />
        
</ composite - id >
    
</ class >
</ hibernate - mapping >

d.person.hbm

<? xml version = " 1.0 "  encoding = " utf-8 " ?>
<! DOCTYPE hibernate - mapping PUBLIC  " -//Hibernate/Hibernate Mapping DTD 3.0//EN "
" http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd " >
<!--  
    Mapping file autogenerated by MyEclipse 
-  Hibernate Tools
-->
< hibernate - mapping  package = " com.witbridge.payroll.model " >
    
< class  name = " Person "  table = " PERSON "  schema = " DB2ADMIN "  lazy = " false " >
        
< id name = " id "  type = " java.lang.Integer " >
            
< column name = " ID "   />
            
< generator  class = " identity " ></ generator >
        
</ id >
        
< property name = " username "  type = " java.lang.String " >
            
< column name = " USERNAME "  length = " 10 "   />
        
</ property >
        
< property name = " password "  type = " java.lang.String " >
            
< column name = " PASSWORD "  length = " 10 "   />
        
</ property >
    
</ class >
</ hibernate - mapping >


 二.Spring的业务方法层
1.PersonService.java

package  com.witbridge.payroll.service;
import  java.util.List;

import  org.acegisecurity.annotation.Secured;
import  org.springframework.transaction.annotation.Transactional;

import  com.witbridge.payroll.model.Person;
@Transactional
public   interface  PersonService  {
    
    @Secured(
"ADMIN")
    
public String addAssociate(Person person);
    
    @Transactional(readOnly
=true)
    @Secured(
{"ADMIN","HR"})
    
public List<Person> findAllPerson();
    
    
public Person findPersonById(Integer id);
    
    
public void delete(Integer id);
    
    
public void updatePerson(Person person);
}



2.PersonServiceImpl.java

 

package  com.witbridge.payroll.service.impl;

import  java.util.List;

import  org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import  com.witbridge.payroll.model.Person;
import  com.witbridge.payroll.service.PersonService;

public   class  PersonServiceImpl  extends  HibernateDaoSupport  implements  PersonService  {
 
    
public String addAssociate(Person person) {
  getHibernateTemplate().saveOrUpdate(person);
  
return person.getUsername();
 }


 @SuppressWarnings(
"unchecked")
 
public List<Person> findAllPerson() {
  String hql
="from Person";
   
return  getHibernateTemplate().find(hql);
 }


 
public Person findPersonById(Integer id) {
  
return (Person) getHibernateTemplate().load(Person.class, id);
 }


 
public void delete(Integer id) {
  String hql
="delete from Person where id=?";
  getHibernateTemplate().bulkUpdate(hql, id);
  
 }


 
public void updatePerson(Person person) {
  getHibernateTemplate().update(person);
  
 }
  

}



3.Spring的service注入
<? xml version = " 1.0 "  encoding = " UTF-8 " ?>
<! DOCTYPE beans PUBLIC  " -//SPRING//DTD BEAN//EN "   " http://www.springframework.org/dtd/spring-beans.dtd " >

< beans  default - autowire = " byName " >
    
<!--  Auto proxy driven by JDK  5 +  Annotation  -->
    
< bean  class = " org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator "   />
    
    
< bean  class = " org.springframework.transaction.interceptor.TransactionAttributeSourceAdvisor " >
        
< property name = " transactionInterceptor "  ref = " transactionInterceptor "   />
    
</ bean >
    
    
< bean id = " transactionInterceptor "   class = " org.springframework.transaction.interceptor.TransactionInterceptor " >
        
< property name = " transactionManager "  ref = " transactionManager "   />
        
< property name = " transactionAttributeSource " >
            
< bean  class = " org.springframework.transaction.annotation.AnnotationTransactionAttributeSource " />
        
</ property >
    
</ bean >
    
    
        
    
<!-- payroll group:Business manager definitions ,需要的dao采用自动装配,并将service类实例化提供给action  -->
    
< bean id = " userManager "   class = " com.witbridge.payroll.service.impl.UserManagerImpl "   />
    
< bean id = " personService "   class = " com.witbridge.payroll.service.impl.PersonServiceImpl " />
    
< bean id = " roleService "   class = " com.witbridge.payroll.service.impl.RoleServiceImpl " />  
     
</ beans >

三.Spring的acegi:
1.service:
package  com.witbridge.payroll.service;

import  org.acegisecurity.userdetails.UserDetailsService;
import  org.springframework.transaction.annotation.Transactional;


@Transactional
public   interface  UserManager  extends  UserDetailsService  {

}

 

2.serviceimpl:

package  com.witbridge.payroll.service.impl;

import  java.util.List;

import  org.acegisecurity.userdetails.UserDetails;
import  org.acegisecurity.userdetails.UsernameNotFoundException;
import  org.springframework.dao.DataAccessException;
import  org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import  com.witbridge.payroll.model.User;
import  com.witbridge.payroll.service.UserManager;

public   class  UserManagerImpl  extends  HibernateDaoSupport  implements  UserManager  {

    
public UserDetails loadUserByUsername(String username)
            
throws UsernameNotFoundException, DataAccessException {
        
//get user by username
        String hql = "from User u where u.username=?";
        List list 
= getHibernateTemplate().find(hql, username);
        
if (list.isEmpty()) {
            
throw new UsernameNotFoundException("Username:" + username + " not found!");
        }

        
        User user 
= (User) list.get(0);
        
        
//get user's roles
        hql = "select new Role(r.id, r.name) from UserRole ur, Role r where ur.userId=? and ur.roleId=r.id";
        List roles 
= getHibernateTemplate().find(hql, user.getId());
        user.setRoles(roles);
        
        
return user;
    }

    
}


3.acegi的配置
<? xml version = " 1.0 "  encoding = " UTF-8 " ?>
<! DOCTYPE beans PUBLIC  " -//SPRING//DTD BEAN//EN "   " http://www.springframework.org/dtd/spring-beans.dtd " >

< beans >

    
< bean id = " filterChainProxy "   class = " org.acegisecurity.util.FilterChainProxy " >
        
< property name = " filterInvocationDefinitionSource " >
            
< value >
                CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON
                PATTERN_TYPE_APACHE_ANT
                
/** */ /**=httpSessionContextIntegrationFilter,logoutFilter,authenticationProcessingFilter,securityContextHolderAwareRequestFilter,rememberMeProcessingFilter,anonymousProcessingFilter,exceptionTranslationFilter,filterInvocationInterceptor
            </value>
        </property>
    </bean>
    
<!-- ================================================== Filters definition ===================================================-->
    <!-- the filters have three sepatate parts:ProcessingFilter, FilterSecurityInterceptor,ProviderManager-->
    
    <!-- save the username and password in the securityContext -->
    <bean id="httpSessionContextIntegrationFilter" class="org.acegisecurity.context.HttpSessionContextIntegrationFilter"/>

    <bean id="logoutFilter" class="org.acegisecurity.ui.logout.LogoutFilter">
        <constructor-arg value="/login.jsp"/> <!-- URL redirected to after logout -->
        <constructor-arg>
            <list>
                <ref bean="rememberMeServices"/>
                <bean class="org.acegisecurity.ui.logout.SecurityContextLogoutHandler"/>
            </list>
        </constructor-arg>
        <property name="filterProcessesUrl" value="/logout" />
    </bean>

    <bean id="authenticationProcessingFilter" class="org.acegisecurity.ui.webapp.AuthenticationProcessingFilter">
        <property name="authenticationManager" ref="authenticationManager"/>
        <property name="authenticationFailureUrl" value="/login.jsp?error=true"/>
        <property name="defaultTargetUrl" value="/login.do?method=login"/>
        <property name="filterProcessesUrl" value="/login"/>
        <property name="rememberMeServices" ref="rememberMeServices"/>
    </bean>
  
    <bean id="securityContextHolderAwareRequestFilter" class="org.acegisecurity.wrapper.SecurityContextHolderAwareRequestFilter"/>

    <bean id="rememberMeProcessingFilter" class="org.acegisecurity.ui.rememberme.RememberMeProcessingFilter">
        <property name="authenticationManager" ref="authenticationManager"/>
        <property name="rememberMeServices" ref="rememberMeServices"/>
    </bean>

    <bean id="anonymousProcessingFilter" class="org.acegisecurity.providers.anonymous.AnonymousProcessingFilter">
        <property name="key" value="acegi_anonymous"/>
        <property name="userAttribute" value="anonymousUser,ANONYMOUS"/>
    </bean>

    <bean id="exceptionTranslationFilter" class="org.acegisecurity.ui.ExceptionTranslationFilter">
        <property name="authenticationEntryPoint">
            <bean class="org.acegisecurity.ui.webapp.AuthenticationProcessingFilterEntryPoint">
                <property name="loginFormUrl" value="/"/>
                <property name="forceHttps" value="false"/>
            </bean>
        </property>
        <property name="accessDeniedHandler">
            <bean class="org.acegisecurity.ui.AccessDeniedHandlerImpl">
                <property name="errorPage" value="/common/accessDenied.jsp"/>
            </bean>
        </property>
    </bean>
    
    
    
    
    
    
    <!-- payroll group:整个security配制只需要改变此处,对您开发的url进行访问权限控制,基本格式为:/目录名/页面名称*=权限名 -->
    <bean id="filterInvocationInterceptor" class="org.acegisecurity.intercept.web.FilterSecurityInterceptor">
        <property name="authenticationManager" ref="authenticationManager"/>
        <property name="accessDecisionManager" ref="accessDecisionManager" />
        <property name="objectDefinitionSource">
            <value>
                CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON
                PATTERN_TYPE_APACHE_ANT
                /associate/**=FD,ADMIN
                
                /**=IS_AUTHENTICATED_ANONYMOUSLY  <!-- must be the last line -->
            </value>
        </property>
    </bean>











<!-- ========================================== End filters definition =========================================== -->

    <!-- Authentication Manager -->
    <bean id="authenticationManager" class="org.acegisecurity.providers.ProviderManager">
        <property name="providers">
            <list>
                <ref local="daoAuthenticationProvider"/>
                <bean class="org.acegisecurity.providers.anonymous.AnonymousAuthenticationProvider">
                    <property name="key" value="acegi_anonymous"/>
                </bean>
                <bean class="org.acegisecurity.providers.rememberme.RememberMeAuthenticationProvider">
                    <property name="key" value="acegi_rememberme"/>
                </bean>
            </list>
        </property>
    </bean>
    
    <!-- userDetailsService通过注入的方式进行权限验证 -->
    <bean id="daoAuthenticationProvider" class="org.acegisecurity.providers.dao.DaoAuthenticationProvider">
        <property name="userDetailsService" ref="userManager"/>
        <property name="userCache" ref="userCache" />
    </bean>
    <bean id="userCache" class="org.acegisecurity.providers.dao.cache.EhCacheBasedUserCache">
        <property name="cache">
            <bean class="org.springframework.cache.ehcache.EhCacheFactoryBean">
                <property name="cacheManager">
                    <bean class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"/>
                </property>
                <property name="cacheName" value="userCache"/>
            </bean>
        </property>
    </bean>
    
    <!-- Access Decision Manager -->
    <bean id="accessDecisionManager" class="org.acegisecurity.vote.AffirmativeBased">
        <property name="decisionVoters">
            <list>
                <bean class="org.acegisecurity.vote.RoleVoter">
                    <property name="rolePrefix" value="" />
                </bean>
                <bean class="org.acegisecurity.vote.AuthenticatedVoter"/>
            </list>
        </property>
        <property name="allowIfAllAbstainDecisions" value="false"/>
    </bean>

    <!-- RememberMe Service,save the user's messages into Cookies -->
    <bean id="rememberMeServices" class="org.acegisecurity.ui.rememberme.TokenBasedRememberMeServices">
        <property name="userDetailsService" ref="userManager"/>
        <property name="key" value="acegi_rememberme"/>
    </bean>

<!-- =======================Method Security Interceptor Driven by Annotation Auto Proxy ============================== -->
     <!-- This bean has been defined in applicationContext-service.xml!
     <bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"/>
     -->
    
    
    <bean class="org.acegisecurity.intercept.method.aopalliance.MethodDefinitionSourceAdvisor" autowire="constructor" />

    <bean id="methodSecurityInterceptor" class="org.acegisecurity.intercept.method.aopalliance.MethodSecurityInterceptor">
        <property name="validateConfigAttributes" value="true" />
        <property name="authenticationManager" ref="authenticationManager" />
        <property name="accessDecisionManager" ref="accessDecisionManager" />
        <property name="objectDefinitionSource">
            <bean class="org.acegisecurity.intercept.method.MethodDefinitionAttributes">
                <property name="attributes"><bean class="org.acegisecurity.annotation.SecurityAnnotationAttributes" />
                </property>
            </bean>
        </property>
    </bean>
 
</beans>

  四.struts
1.web.xml:
<? xml version = " 1.0 "  encoding = " UTF-8 " ?>
< web - app xmlns = " http://java.sun.com/xml/ns/j2ee "
    xmlns:xsi
= " http://www.w3.org/2001/XMLSchema-instance "  version = " 2.4 "
    xsi:schemaLocation
= " http://java.sun.com/xml/ns/j2ee   http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd " >
    
    
<!--  load the Spring xml files  -->
    
    
< context - param >
        
< param - name > contextConfigLocation </ param - name >
        
< param - value >
            
/ WEB - INF / applicationContext -* .xml
        
</ param - value >
    
</ context - param >
    
        
<!--  Spring Context Listener  -->
    
    
< listener >
        
< listener - class > org.springframework.web.context.ContextLoaderListener </ listener - class >
    
</ listener >
    
    
    
<!--  Encoding Filter  -->
    
< filter >
        
< filter - name > CharacterEncodingFilter </ filter - name >
        
< filter - class > org.springframework.web.filter.CharacterEncodingFilter </ filter - class >
        
< init - param >
            
< param - name > encoding </ param - name >
            
< param - value > UTF - 8 </ param - value >
        
</ init - param >
        
< init - param >
            
< param - name > forceEncoding </ param - name >
            
< param - value > true </ param - value >
        
</ init - param >
    
</ filter >
    
< filter - mapping >
        
< filter - name > CharacterEncodingFilter </ filter - name >
        
< url - pattern > /**/ /*</url-pattern>
    </filter-mapping>
    
    <!-- Acegi Filter -->
    <filter>
        <filter-name>Acegi Filter Chain Proxy</filter-name>
        <filter-class>org.acegisecurity.util.FilterToBeanProxy</filter-class>
        <init-param>
            <param-name>targetClass</param-name>
            <param-value>org.acegisecurity.util.FilterChainProxy</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>Acegi Filter Chain Proxy</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    
    
    <!-- Struts Config -->
    <servlet>
        <servlet-name>action</servlet-name>
        <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
        <init-param>
            <param-name>config</param-name>
            <param-value>/WEB-INF/struts-config.xml</param-value>
        </init-param>
        <load-on-startup>2</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>action</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>

    <!-- Session time out(minute) definition -->
    <session-config>
        <session-timeout>30</session-timeout>
    </session-config>
    
    <!-- Welcome file difinition -->
    <welcome-file-list>
        <welcome-file>login.jsp</welcome-file>
    </welcome-file-list>
    
    <!-- Error pages -->
    <error-page>
        <error-code>500</error-code>
        <location>/common/error.jsp</location>
    </error-page>
    
</web-app>


2.struts-config.xml
<? xml version = " 1.0 "  encoding = " UTF-8 " ?>
<! DOCTYPE struts - config PUBLIC  " -//Apache Software Foundation//DTD Struts Configuration 1.2//EN "   " http://struts.apache.org/dtds/struts-config_1_2.dtd " >

< struts - config >
    
<!--  payroll group:add your form - beans  -->
    
< form - beans >
    
    
< form - bean name = " personForm "  type = " org.apache.struts.validator.DynaValidatorForm " >
       
< form - property name = " person "  type = " com.witbridge.payroll.model.Person " ></ form - property >
    
</ form - bean >
    
    
< form - bean name = " roleForm "  type = " org.apache.struts.validator.DynaValidatorForm " >
       
< form - property name = " role "  type = " com.witbridge.payroll.model.Role " ></ form - property >
    
</ form - bean >
    
    
</ form - beans >



    
< global - exceptions  />

    
< global - forwards  />
    
    
    
    
<!--  payroll group:add your action mappings  -->
    
< action - mappings >
        
        
< action path = " /login "
                type
= " com.witbridge.payroll.action.LoginAction "
                parameter
= " method " >
            
< forward name = " mainPage "  path = " /associate/person.jsp "   />
        
</ action >
           
    
< action path = " /person "  
    type
= " com.witbridge.payroll.action.PersonAction "
    name
= " personForm "
    parameter
= " method "
    scope
= " request "
    validate
= " false "
    input
= " /person.jsp " >
    
< forward name = " success "  path = " /associate/person.jsp "   />
    
< forward name = " findAll "  path = " /associate/findPerson.jsp " ></ forward >
    
< forward name = " onePerson "  path = " /associate/onePerson.jsp " ></ forward >
    
< forward name = " failure "  path = " /person.jsp "   />
    
</ action >
    
    
< action path = " /role "  
    type
= " com.witbridge.payroll.action.RoleAction "
    name
= " roleForm "
    parameter
= " method "
    scope
= " request "
    validate
= " false "
    input
= " /manage/createroll.jsp " >
    
< forward name = " success "  path = " /manage/createsuccess.jsp "   />
    
< forward name = " failure "  path = " /manage/failure.jsp "   />
    
</ action >
    
    
        
        
    
    
</ action - mappings >
    
    
    
<!--  apply Delegate Model  for  Spring Framework  -->
    
< controller    processorClass = " org.springframework.web.struts.DelegatingRequestProcessor "   />
    
    
< message - resources parameter = " com.witbridge.payroll.resource.ApplicationResources "   null = " false "   />
    
    
< plug - in className = " org.apache.struts.validator.ValidatorPlugIn " >
        
< set - property property = " pathnames "  value = " /WEB-INF/validator-rules.xml, /WEB-INF/validation.xml " />
    
</ plug - in >
   
   
   
</ struts - config >


3.action:
package  com.witbridge.payroll.action;

import  javax.servlet.http.HttpServletRequest;
import  javax.servlet.http.HttpServletResponse;

import  org.acegisecurity.context.SecurityContextHolder;
import  org.apache.struts.action.ActionForm;
import  org.apache.struts.action.ActionForward;
import  org.apache.struts.action.ActionMapping;

import  com.witbridge.payroll.common.BaseDispatchAction;
import  com.witbridge.payroll.model.User;

public   class  LoginAction  extends  BaseDispatchAction  {

    
public ActionForward login(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response) 
throws Exception {
        
        User user 
= (User) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
        
        
        request.getSession().setAttribute(
"user", user);
        
        
return mapping.findForward("mainPage");
    }


}


package  com.witbridge.payroll.action;

import  java.util.ArrayList;
import  java.util.List;

import  javax.servlet.http.HttpServletRequest;
import  javax.servlet.http.HttpServletResponse;
import  org.apache.struts.action.ActionForm;
import  org.apache.struts.action.ActionForward;
import  org.apache.struts.action.ActionMapping;
import  org.apache.struts.actions.DispatchAction;
import  org.apache.struts.validator.DynaValidatorForm;

import  com.witbridge.payroll.model.Person;
import  com.witbridge.payroll.service.PersonService;




public   class  PersonAction  extends  DispatchAction  {
    
//通过注入方式得到bean,action中一定要有set方法
    private PersonService personService;
    
    
public void setPersonService(PersonService personService) {
        
this.personService = personService;
    }


    
public ActionForward addPerson(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response) 
throws Exception {
        
        DynaValidatorForm personForm 
= (DynaValidatorForm) form;
        Person person
=(Person) personForm.get("person");
        String success
=personService.addAssociate(person);
        
        
if(success!=nullreturn mapping.findForward("success");  }
        
        
else return mapping.findForward("failure");
    }


    
public ActionForward getAllPerson(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response) 
throws Exception {
       List personList
=new ArrayList();
       personList
=personService.findAllPerson();
       request.setAttribute(
"personList", personList);
       
return mapping.findForward("findAll");
    }

    
    
public ActionForward getPersonById(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response) 
throws Exception {
       Integer id
=new Integer(request.getParameter("id"));
        Person person
=new Person();
       person
=personService.findPersonById(id);
       request.setAttribute(
"person", person);
       
return mapping.findForward("onePerson");
    }


    
    
public ActionForward updatePerson(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response) 
throws Exception {
        DynaValidatorForm personForm 
= (DynaValidatorForm) form;
        Person person
=(Person) personForm.get("person");
        System.out.println(person.getId());
        personService.updatePerson(person);
       
return mapping.findForward("success");
    }




}



4.spring接管action的配置
<? xml version = " 1.0 "  encoding = " UTF-8 " ?>
<! DOCTYPE beans PUBLIC  " -//SPRING//DTD BEAN//EN "   " http://www.springframework.org/dtd/spring-beans.dtd " >

< beans  default - autowire = " byName " >

    
<!-- payroll group: action definitions  -->
    
<!--  采用delegate方式装配action ,并且所需service类也自动装配,不用getBean方式去获得 -->
    
< bean name = " /login "   class = " com.witbridge.payroll.action.LoginAction " />
    
< bean name = " /person "   class = " com.witbridge.payroll.action.PersonAction " />
    
< bean name = " /role "   class = " com.witbridge.payroll.action.RoleAction "   />


</ beans >

你可能感兴趣的:(ssh实现的包含acegi的项目框架(注释少))