<script type="text/javascript">
new Draggable("related_topics");
</script>
用过acegi的都知道acegi的用户登陆信息(用户id 角色)等放在
threadLocal
中
下面是自己土制的
threadLocal
比acegi的简单很多,更容易明白它的原理
用过OpenSessionInView的就不用看了,原理完全一样
下面给出关键代码
-
-
public
class
SecurityContext {
-
public
final
static
String SECURITY_CONTEXT_KEY =
"cn.lottery.sale.security.securityContext"
;
-
private
Long userId;
-
private
String username;
-
private
List<String> roles =
new
ArrayList<String>();
-
}
//安全上下文,保存用户登陆数据
public class SecurityContext {
public final static String SECURITY_CONTEXT_KEY = "cn.lottery.sale.security.securityContext";
private Long userId;
private String username;
private List<String> roles = new ArrayList<String>();
}
-
LoginAction中的login方法
-
public
String login(){
-
SecurityContext sc =
new
SecurityContext();
-
sc.setUsername(username);
-
getRequest().getSession().setAttribute(SecurityContext.SECURITY_CONTEXT_KEY, sc);
-
return
SUCCESS;
-
}
LoginAction中的login方法
public String login(){
SecurityContext sc = new SecurityContext();
sc.setUsername(username);
getRequest().getSession().setAttribute(SecurityContext.SECURITY_CONTEXT_KEY, sc);
return SUCCESS;
}
-
-
public
class
SecurityFilter
implements
Filter {
-
private
final
static
Logger logger = LoggerFactory.getLogger(SecurityFilter.
class
);
-
-
public
void
doFilter(ServletRequest request, ServletResponse response,
-
FilterChain chain)
throws
IOException, ServletException {
-
-
HttpServletRequest req = (HttpServletRequest)request;
-
HttpSession session = req.getSession();
-
-
if
(session !=
null
){
-
SecurityContext context = (SecurityContext)session.getAttribute(SecurityContext.SECURITY_CONTEXT_KEY);
-
logger.debug(
"绑定用户信息到线程"
+ Thread.currentThread().getId());
-
SecurityContextHolder.set(context);
-
}
-
try
{
-
chain.doFilter(request, response);
-
}
finally
{
-
logger.debug(
"删除绑定到当前线程的用户信息"
+ Thread.currentThread().getId());
-
SecurityContextHolder.remove();
-
}
-
-
}
-
}
//安全过滤器。绑定session中用户信息到threadLocal
public class SecurityFilter implements Filter {
private final static Logger logger = LoggerFactory.getLogger(SecurityFilter.class);
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest)request;
HttpSession session = req.getSession();
if(session != null){
SecurityContext context = (SecurityContext)session.getAttribute(SecurityContext.SECURITY_CONTEXT_KEY);
logger.debug("绑定用户信息到线程" + Thread.currentThread().getId());
SecurityContextHolder.set(context);
}
try{
chain.doFilter(request, response);
}finally{
logger.debug("删除绑定到当前线程的用户信息" + Thread.currentThread().getId());
SecurityContextHolder.remove();
}
}
}
-
-
public
class
LotteryManager {
-
private
final
static
Logger logger = LoggerFactory.getLogger(LotteryManager.
class
);
-
private
LotteryDAO lotteryDAO;
-
-
@Transactional
(readOnly =
true
)
-
public
List<Lottery> findLotteryByName(String lotteryName){
-
logger.debug( SecurityContextHolder.get().getUsername() );
-
return
lotteryDAO.findByProperty(
"shortName"
, lotteryName);
-
}
-
-
}
分享到:
相关推荐
acegi,acegi,acegi
Acegi文档 spring acegi 详细文档
包含acegi-security-1.0.7.jar,acegi-security-1.0.7-sources.jar,acegi-security-cas-1.0.7.jar,acegi-security-cas-1.0.7-sources.jar,acegi-security-catalina-1.0.7.jar,acegi-security-catalina-1.0.7-...
不错的ACEGI 教程
Acegi安全系统,是一个用于Spring Framework的安全框架,能够和目前流行的Web容器无缝集成。它使用了Spring的方式提供了安全和认证安全服务,包括使用Bean Context,拦截器和面向接口的编程方式。因此,Acegi安全...
acegi 框架 介绍 spring 安全
acegi-security 1.0.2.jar
Acegi能做什么 Acegi的体系结构 Acegi核心组件 典型的web认证过程 Acegi的登陆认证 Acegi对安全对象的访问控制 Filter 组件 Acegi的不足之处
1、一个Acegi的例子,可以运行 2、一个很好的学Acegi的网址,0基础学习Acegi,强烈推荐 3、有什么问题可以发邮件heroshen@126.com讨论
关于Acegi的安全框架,里面有Acegi的实例,讲述得挺清楚的,
acegi,spring的安全验证框架
Acegi安全系统,是一个用于Spring Framework的安全框架,能够和目前流行的Web容器无缝集成。它使用了Spring的方式提供了安全和认证安全服务,包括使用Bean Context,拦截器和面向接口的编程方式。因此,Acegi安全...
Acegi学习笔记--Acegi详解Acegi学习笔记--Acegi详解Acegi学习笔记--Acegi详解Acegi学习笔记--Acegi详解Acegi学习笔记--Acegi详解
Acegi使用.pdf
实战Acegi:使用Acegi作为基于Spring框架的WEB应
Acegi是一个专门为SpringFramework提供安全机制的项目,全称为Acegi Security System for Spring.
spring_acegi精彩实例,带MYSQL数据库脚本,保证能运行 spring_acegi精彩实例,带MYSQL数据库脚本,保证能运行 spring_acegi精彩实例,带MYSQL数据库脚本,保证能运行 spring_acegi精彩实例,带MYSQL数据库脚本,...
spring acegi 使用工程demo
acegi安全系统,是一个用于spring framework的安全框架,能够和目前流行的web容器无缝集成。它使用了spring的方式提供了安全和认证安全服务,包括使用bean context,拦截器和面向接口的编程方式。因此,acegi安全...