`
ammayjxf
  • 浏览: 68346 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

sshacegi

阅读更多
http://www.ibm.com/developerworks/cn/java/j-acegi3/




一.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!=null) { return 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>
分享到:
评论

相关推荐

    基于jsp+servlet+mysql的javaweb健身房俱乐部系统

    包括系统管理后台和前端动态网页的设计搭建。系统管理后台提供给俱乐部员工使用,可以对俱乐部的课程、器材、房间等进行管理维护;前端网页主要提供给消费者使用,可以在线浏览课程、预约上课等。 技术栈:JavaScript,Mysql 数据库,JSP、tomcat、HTML、CSS。

    Tomcat安装配置基础详细教程讲解.docx

    tomcat安装及配置教程 Tomcat安装配置基础详细教程讲解.docx

    51单片机智能百叶窗项目

    51单片机智能百叶窗项目

    PHP课程网站络管理系统

    PHP课程网站络管理系统

    2023年上半年度TikTok行业白皮书电子版.zip

    2023年上半年度TikTok行业白皮书电子版.zip

    扩展卡尔曼滤波算法的python代码实现与解读.docx

    卡尔曼滤波算法 扩展卡尔曼滤波(Extended Kalman Filter, EKF)是卡尔曼滤波的一种扩展,用于解决非线性系统的状态估计问题。EKF通过局部线性化非线性函数来近似非线性系统的行为,从而应用标准的卡尔曼滤波算法。下面是一个简单的扩展卡尔曼滤波算法的Python实现示例,以及对其核心步骤的解读。 ### Python代码实现 ```python import numpy as np def ekf(x, P, measurement_func, measurement_jacobian, control_input=None, control_jacobian=None, measurement=None, R=None, Q=None): """ 扩展卡尔曼滤波算法实现 参数: x: 上一时刻的状态估计值,维度为(n,)的np.array P: 上一时刻的协方差矩阵,维度为(n,n)的np.array measurement_func: 非线性测量模型函数,输入状态输出测量值 measureme

    tomcat安装及配置教程

    tomcat安装及配置教程

    《2022_电商出海营销白皮书》.zip

    《2022_电商出海营销白皮书》.zip

    Python课设-学生信息管理系统

    Python课设-学生信息管理系统

    产品设计塑胶类螺丝柱设计标准,适合新手使用

    适合塑胶类产品设计:内容1:自攻螺丝塑胶孔设计,塑胶螺丝孔设计尺寸要求,十二种经典的螺栓防松设计,螺纹及螺纹连接件 ,螺丝柱设计,螺丝制作工艺及设计准则详述.,螺丝与塑胶柱的基本设计要求,螺丝设计选用规范,螺丝设计标准解析,螺丝孔设计标准,螺丝及塑胶螺丝柱的设计.,螺丝标准,螺丝柱设计,等

    QT实时数据曲线Plot

    1、QT界面布局学习 2、Custom Plot组件学习 3、Custom Plot组件示例 4、Custom Plot组件二次开发

    基于uni-app的垃圾分类精灵的设计与实现源码.zip

    提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

    TikTok直播运营分享1_20231126105338.zip

    TikTok直播运营分享1_20231126105338.zip

    CANON打印机清零软件合集

    目前为止几乎包含 Service Tool 工具的所有版本,支持CANON目前为止的所有型号

    FPGA Verilog PLL锁相环 FIFO同步 ip核调用 仿真工程

    FPGA Verilog PLL锁相环 FIFO同步 ip核调用 仿真工程 FPGA(Field-Programmable Gate Array)是一种可编程逻辑器件,允许用户根据设计需求配置其内部逻辑。在FPGA中,Verilog是一种硬件描述语言,用于编写数字电路的逻辑设计。PLL(Phase-Locked Loop)是FPGA中常用的一种频率合成技术,它通过锁定相位来同步不同信号源,常用于时钟管理和频率分频。 锁相环(PLL)在Verilog中实现通常包括电压控制振荡器(VCO)、分频器、鉴相器和低通滤波器等模块。PLL设计的关键在于调整这些模块参数,以达到所需的输出频率和相位关系。 FIFO(First-In-First-Out)是一种常用的存储结构,用于在不同时钟域之间传递数据,解决时钟域间的同步问题。在FPGA设计中,FIFO的Verilog实现会涉及到读写指针管理和深度控制,确保数据的正确存取。 在FPGA设计中,经常需要调用预定义的IP(Intellectual Property)核,如PLL和FIFO IP,这些核由供应商提供,经过验证,可以直接集成到设计中。

    《2023_TikTok_for_Business_社群电商爆品营销白皮书》.zip

    《2023_TikTok_for_Business_社群电商爆品营销白皮书》.zip

    高校思想政治理论课教师研究专项教学方法改革择优推广项目.doc

    高校思想政治理论课教师研究专项教学方法改革择优推广项目.doc

    《2023年度TikTok电商行业趋势白皮书》.zip

    《2023年度TikTok电商行业趋势白皮书》.zip

    Lab-Electronic Craft Practicum-2-Simulation of a Single Tube Com

    Lab-Electronic Craft Practicum-2-Simulation of a Single Tube Common Emitter Amplifier Circuit //Multisim14.0 //电子工艺实习-2-单管共射极放大电路的仿真

    基于Java的在线作业提交批改系统设计与实现源码.zip

    提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

Global site tag (gtag.js) - Google Analytics