springsecurity3.0

最近不忙了,将自己做过的一些东西写到博客上以防忘记
网站的权限管理部分采用了springsecurity3
第一步在pom.xml中加入以下代码
<!-- spring security -->
		<dependency>
			<groupId>org.springframework.security</groupId>
			<artifactId>spring-security-core</artifactId>
			<version>3.0.2.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.springframework.security</groupId>
			<artifactId>spring-security-config</artifactId>
			<version>3.0.2.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.springframework.security</groupId>
			<artifactId>spring-security-taglibs</artifactId>
			<version>3.0.2.RELEASE</version>
		</dependency>

		<dependency>
			<groupId>com.google.collections</groupId>
			<artifactId>google-collections</artifactId>
			<version>1.0</version>
		</dependency>


第二步:新建applicationContext-security.xml进行开发前的一些配置
  <?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/security"
    xmlns:beans="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
           http://www.springframework.org/schema/security
           http://www.springframework.org/schema/security/spring-security-3.0.xsd" default-autowire="byName">

    <http auto-config="true"    access-denied-page="/accessDenied.jsp" ><!-- 当访问被拒绝时,会转到403.jsp -->
        <intercept-url pattern="" filters="none" />
		<intercept-url pattern="/logout/logout.action" filters="none" />	 
        <intercept-url pattern="/login.jsp" filters="none" />
     	<intercept-url pattern="/css/**" filters="none" />
		<intercept-url pattern="/images/**" filters="none" />
		<intercept-url pattern="/layout/**" filters="none" />
		<intercept-url pattern="/js/**" filters="none" />
        <intercept-url pattern="/style/**" filters="none" />
        <intercept-url pattern="/baike_editor/**" filters="none" />
        <intercept-url pattern="/commen/**" filters="none" />
        <intercept-url pattern="/datepicker/**" filters="none" />
       
        <form-login login-page="/login.jsp"
            authentication-failure-url="/login.jsp?error=true"
            default-target-url="/index.jsp" />
        <logout logout-success-url="/login.jsp" />
        <http-basic />
        <!-- 增加一个filter,这点与Acegi是不一样的,不能修改默认的filter了,这个filter位于FILTER_SECURITY_INTERCEPTOR之前 -->
          <custom-filter before="FILTER_SECURITY_INTERCEPTOR" ref="myFilter" />
         <custom-filter after="PRE_AUTH_FILTER"  ref="mycookiesfilter"/>
    </http>

    <!-- 一个自定义的filter,必须包含authenticationManager,accessDecisionManager,securityMetadataSource三个属性,
               我们的所有控制将在这三个类中实现,解释详见具体配置 -->
    <beans:bean id="myFilter" class="com.specl.mis.login.filter.MyFilterSecurityInterceptor">
      
    </beans:bean>
    
    <!-- 认证管理器,实现用户认证的入口,主要实现UserDetailsService接口即可 -->
    <authentication-manager alias="authenticationManager">
        <authentication-provider user-service-ref="myUserDetailService">
<!--密码采用MD5加密 当然security也提供了盐值加密-->
                <password-encoder hash="md5" />
        </authentication-provider>
    </authentication-manager>
    <beans:bean id="myUserDetailService"
        class="********" >
    </beans:bean>

    <!-- 访问决策器,决定某个用户具有的角色,是否有足够的权限去访问某个资源 -->
    <beans:bean id="accessDecisionManager"
        class="*****">
    </beans:bean>
    
    <!-- 资源源数据定义,即定义某一资源可以被哪些角色访问 -->
    <beans:bean id="securityMetadataSource"
        class="*****" />
    
	<!--自定义username password  过滤器-->

		<beans:bean id="authenticationProcessingFilter"
		class="******">
	   </beans:bean> 
	
  
<!--增加自定义的cookies过滤器-->
	<beans:bean id="mycookiesfilter"
		class="*******">		
	</beans:bean>

</beans:beans>


下面分析springsecurity的执行原理
从登陆开始
1、登陆--->2、根据用户名查询(注意只是根据用户名查询)--->3、验证密码(假设密码对)-->4、获取你要访问的url---->5、查找访问此url资源需要的权限------>6、用当前登录用户拥有的权限去和访问url资源需要的权限对比------>7、当前用户有该权限(登陆成功)否则登陆失败
ok有了这个思路后我们就开始将此汉语转成java
登陆
学过springsecurity的都知道该怎么写 很简单
   <form id="form1" name="form1" method="post" action="${pageContext.request.contextPath}/j_spring_security_check">
					<ul class="login_label input_bg1">
											
						<li><label>登录名:</label><input type='text' id='j_username' name='j_username'  class="required" /></li>
						<li><label>密码:</label><input type='password' id='j_password' name='j_password'  class="required" /></li>
						<li><label>验证码:</label><input type="text" name="j_code"  class="required put1"  id="imagecode" autocomplete="off"/span id="code"></span></li>
					</ul>
					<p class="align3a"><span class="input_bg2"><input type="submit" name="button" id="button" value="登 录" /></span></p>
					</form>





注意用户名和密码的name是固定的分别为j_username和但是验证码怎么加呢?一般的网站登陆可都是需要验证码的这个问题先留着
ok表单写好了 该提交登陆了
按照上面的流程应该到---按用户名进行查询
注意这个查询不是你想写到哪就写到哪的 我们必须写一个类该类需要实现UserDetailsServiceImpl接口
   public UserDetails loadUserByUsername(String loginname)	throws UsernameNotFoundException, DataAccessException {
			}


该方法里面loginname就是你填写的登录名该参数不需要你传值,此方法返回一个对象UserDetails该对象是springSecurity提供的一个抽象类需要我们继承
   public class MyUserDetails extends Operator implements UserDetails, Serializable {
      public Collection<GrantedAuthority> getAuthorities() {
						}
		return null;
	}
}


这个类干什么的呢 ?
注意在这个类中有一个方法getAuthorities此方法中我们需要获取登录用户拥有的权限然后一个集合


今天先写到这

你可能感兴趣的:(spring,配置管理,Security,Google,Acegi)