随着企业不同的应用的数量的增多,但是在企业内部不同的用户都要去登录不同的系统;是想一下,如果每个系统都有自己的一套权限,那么系统的用户都要有自己的用户名和密码,那么一个高层领导要查看公司的系统,是否一定知道所有系统的自己的帐号和密码,这是一件相当繁琐的事情。统一身份认证就是问解决此类问题的一个框架。好了,废话不说了,现在开始共享一下我学习身份认证框架的过程。
简单的认证方式--基于内存的认证
步骤如下:
第一步:在Ecplise下创建一个动态的web工程(这步不做详细解释,凡是使用Eclipse开发web的都应该会)。
第二步:添加项目jar包:
standard.jar
spring.jar
jstl.jar
commons-logging.jar
acegi-security-tiger-1.0.3.jar
acegi-security-1.0.3.jar
说明:本人学习时使用是Spring2.5.6和acegi-security-1.03版本
第三步:配置web.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">
<display-name>Security</display-name>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:applicationContext-acegi-plugin.xml
</param-value>
</context-param>
<filter>
<filter-name>AcegiFilterChainProxy</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>AcegiFilterChainProxy</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
第四步: 根据web.xml文件的context-param在相应的路径下创建Spring的xml文件
在src目录下创建applicationContext-acegi-plugin.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:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
<bean id="filterChainProxy" class="org.acegisecurity.util.FilterChainProxy">
<property name="filterInvocationDefinitionSource">
<value>
CONVERT_URL_TO_UPPERCASE_BEFORE_COMPARISON
PATTERN_TYPE_APACHE_ANT
/**=authenticationProcessingFilter
</value>
</property>
</bean>
<bean id="authenticationManager" class="org.acegisecurity.providers.ProviderManager">
<property name="providers">
<list>
<ref local="daoAuthenticationProvider"/>
</list>
</property>
</bean>
<bean id="daoAuthenticationProvider" class="org.acegisecurity.providers.dao.DaoAuthenticationProvider">
<property name="userDetailsService" ref="userDetailsService"/>
</bean>
<bean id="userDetailsService" class="org.acegisecurity.userdetails.memory.InMemoryDaoImpl">
<property name="userMap">
<value>
john=john,PRIV_COMMON,PRIV_1
tom=tom,PRIV_COMMON,PRIV_1,PRIV_2
peter=peter,disabled,PRIV_COMMON,PRIV_1
</value>
</property>
</bean>
<bean id="authenticationProcessingFilter" class="org.acegisecurity.ui.webapp.AuthenticationProcessingFilter">
<property name="authenticationManager" ref="authenticationManager"/>
<property name="filterProcessesUrl" value="/j_acegi_security_check"/>
<property name="defaultTargetUrl" value="/main.jsp"/>
<property name="authenticationFailureUrl" value="index.jsp?login_error=1"/>
</bean>
</beans>
第五步:添加log4j.properties文件
在src目录下添加log4j.properties文件,内容如下:
log4j.rootLogger=DEBUG,A1
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%d %5p [%t] (%F:%L) - %m%n
第六步:添加Jsp页面
在web的根目录下创建index.jsp和main.jsp文件(为什么在web的根目录下创建原因见applicationContext-acegi-plugin.xml的id为authenticationProcessingFilter的bean)
index.jsp内容如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>登录页面</title>
</head>
<body>
<c:if test="${not empty param.login_error}">
<font color="red">用户名和密码错误</font>
</c:if>
<form name="form1" method="post" action="<c:url value="/j_acegi_security_check"/>">
用户名:<input type="text" name="j_username"><br>
密码:<input type="text" name="j_password"/><br>
<input type="submit" value="登录">
</form>
</body>
</html>
main.jsp内容日下
<%@ page contentType="text/html;charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="authz" uri="http://acegisecurity.org/authz" %>
<html>
<head>
<title>main</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
</head>
<body>
当前用户:<authz:authentication operation="username"/><br/>
</body>
</html>
本文介绍了一种基于内存的身份认证方式,通过具体步骤演示了如何在Web应用中实现统一身份认证,包括配置文件、依赖包引入及JSP页面设计。

3万+

被折叠的 条评论
为什么被折叠?



