使用acegi在业务逻辑层获得Web层的用户ID

〈/beans〉

说明:如果你想使用md5口令验证,请去掉〈!--〈property name="passwordEncoder" ref="passwordEncoder"/〉--〉的注释。


6、log4j.properties

放在WEB-INF\classes下:
log4j.rootLogger=info,CONSOLE
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Target=System.out
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern= %4p [%t] (%F:%L) - %m%n

7、配置业务方法的前置通知(Advice)

在业务方法的前置通知类编写获取Web层用户身份的代码,在业务方法的后置通知类编写操作日志的方法调用,在操作日志方法中可通过acegi提供的API来获取当前操作者的Authenticaton。实际上acegi提供了一个非常松散的集成机制,如果你仅需要使用acegi获得Web层的身份,只需要在Advice类中引入acegi的方法,即使我们以后不使用acegi,也使代码的修改非常有限。
业务接口:TestAOPInterface。
下面是为TestAOPInterface的Advice配置的xml文件aoptest.xml。 文件的类路径为:com.mysoft.pmi.resource。文件内容:
〈?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="interceptTarget" class="com.mysoft.pmi.testcase.aop.TestAOPInterfaceImpl" singleton="false"/〉

〈bean id="welcomeAdvice" class="com.mysoft.pmi.testcase.aop.WelcomeAdvice"/〉
〈bean id="aopProxyFactoryBean"
class="org.springframework.aop.framework.ProxyFactoryBean"〉
〈property name="proxyInterfaces"〉
〈list〉
〈value〉com.mysoft.pmi.testcase.aop.TestAOPInterface〈/value〉
〈/list〉
〈/property〉
〈property name="interceptorNames"〉
〈list〉
〈value〉welcomeAdvice〈/value〉
〈/list〉
〈/property〉
〈property name="target"〉〈ref bean="interceptTarget"/〉
〈/property〉
〈/bean〉
〈/beans〉

第二章 相关的Java
2.1 接口TestAOPInterface
此接口的角色为业务逻辑层接口。
package com.mysoft.pmi.testcase.aop;

public interface TestAOPInterface
{

public void test(String arg0,String arg1);

public void testAAA(String arg0,String arg1);

}

2.2 接口实现类TestAOPInterfaceImpl
package com.mysoft.pmi.testcase.aop;

public class TestAOPInterfaceImpl implements TestAOPInterface
{

public void test(String arg0, String arg1) {
System.out.println(arg0+"/"+arg1);

}

public void testAAA(String arg0, String arg1) {
System.out.println(arg0+":"+arg1);

}


}

2.3 接口实现类TestAOPInterface的Advice类


package com.mysoft.pmi.testcase.aop;
import Java.lang.reflect.Method;
import org.springframework.aop.MethodBeforeAdvice;
import org.acegisecurity.context.SecurityContext;
import org.acegisecurity.context.SecurityContextHolder;
import org.acegisecurity.userdetails.UserDetails;
import org.acegisecurity.Authentication;
//import org.acegisecurity.vote.RoleVoter;
//import org.apache.log4j.Logger;
//import org.acegisecurity.providers.ProviderManager;
//import org.acegisecurity.vote.AffirmativeBased;
//import org.acegisecurity.ui.session.HttpSessionEventPublisher;
//import org.acegisecurity.providers.anonymous.AnonymousProcessingFilter;
//import org.acegisecurity.providers.dao.DaoAuthenticationProvider;
//import org.acegisecurity.providers.anonymous.AnonymousAuthenticationProvider;
//import org.acegisecurity.providers.dao.cache.EhCacheBasedUserCache;
//import org.acegisecurity.userdetails.jdbc.JdbcDaoImpl;
//import org.acegisecurity.userdetails.jdbc.JdbcDaoImpl;
//import org.acegisecurity.context.SecurityContextImpl;
//import org.acegisecurity.vote.AffirmativeBased;
//import org.acegisecurity.userdetails.jdbc.JdbcDaoImpl;
//import org.springframework.jdbc.datasource.DataSourceTransactionManager;
//import org.springframework.jdbc.core.JdbcTemplate;
//import org.springframework.beans.factory.config.CustomEditorConfigurer;
//import org.acegisecurity.intercept.method.MethodDefinitionSource;
//import org.springframework.transaction.interceptor.TransactionInterceptor;
//import org.acegisecurity.intercept.method.aopalliance.MethodSecurityInterceptor;
//import org.acegisecurity.providers.*;

public class WelcomeAdvice implements MethodBeforeAdvice
{

public void before(Method method, Object[] args, Object target) throws Throwable
{
System.out.println("hihihihihi,启动MethodBeforeAdvice ");
String userName;
SecurityContext ctx = SecurityContextHolder.getContext();
if(ctx!=null)
{
System.out.println("ctx is not null");
Authentication auth = ctx.getAuthentication();
if(auth!=null)
{
System.out.println("auth is not null!");
Object principal=auth.getPrincipal();
if(principal instanceof UserDetails)
{
//输出用户名
System.out.println( "UserName is "+((UserDetails)principal).getUsername());
//密码获得
System.out.println( "UserPassword is "+((UserDetails)principal).getPassword());


}else{
System.out.println("pricipal.toString()=="+principal.toString());

共6页 首页 上一页 [2] [3] [4] [5] [6下一页 尾页>
字母检索 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z