首页 > 代码库 > Spring Security3.1实践

Spring Security3.1实践

收拾材料,收拾思路

 

3.1.Spring Security3.1的2种常见号码大全办法

Ø  用户信息和权限存储于数据库,而资本和权限的对应选用硬关键词挖掘工具编码装备。

Ø  细分角色和权限,并将角色、用户、资本、权限均都存储于数据库中。而且自定义过滤器,替代本来的FilterSecurityInterceptor过滤器;并分别完成AccessDecisionManager、UserDetailsService和InvocationSecurityMetadataSourceService,并在装备文件中进行相应装备。

Ø发现两者不可联系运用,会有疑问。

代码收拾

 

接下来开端着手代码编写,不管是两种完成办法中的哪种办法,个人感觉都需要把加载用户信息放在一个类里面办理,直观便利,构造明晰,不要用在装备文件直接写sql句子。

资本和权限对应写在装备文件中

1、     web.xml装备

     a)     启动时加载Spring的jdbc和security装备文件。

     b)      装备spring的servlet过滤器,使其能够辨认Spring Controller。

     c)     加载Spring Security过滤器链署理,它依照次序履行spring的权限过滤器。

     d)     其他业务加载,比方:log4j,字符集编码过滤器,session超时等。

 

Xml代码  保藏代码

 

    xmlns="http://java.sun.com/xml/ns/javaee"   

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   

    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   

    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  

    

    

       webAppRootKey 

       springMvc 

    

     

     

    

       org.springframework.web.util.Log4jConfigListener 

    

    

  

   contextConfigLocation 

    

        classpath:/module/applicationContext-jdbc.xml,  

        classpath:/module/applicationContext-security.xml  

    

  

    

   

  

   log4jConfigLocation 

   classpath:/config/log4j.properties 

  

    

  

   org.springframework.web.context.ContextLoaderListener 

  

    

   

  

   springSecurityFilterChain 

   org.springframework.web.filter.DelegatingFilterProxy 

  

   springSecurityFilterChain 

-        indexRead arguments from command-line "http://www.3h5.cn"

-        indexRead arguments from command-line "http://www.shoudashou.com"

-        indexRead arguments from command-line "http://www.4lunwen.cn"

-        indexRead arguments from command-line "http://www.zx1234.cn"

-        indexRead arguments from command-line "http://www.penbar.cn"

-        indexRead arguments from command-line "http://www.lunjin.net"

-        indexRead arguments from command-line "http://www.ssstyle.cn"

-        indexRead arguments from command-line "http://www.91fish.cn"

   /* 

  

       springmvc 

       org.springframework.web.servlet.DispatcherServlet 

        

           contextConfigLocation 

           classpath:/module/applicationContext-servlet.xml 

        

       1 

       springmvc 

       / 

    

    

   

    

        

            org.springframework.web.util.IntrospectorCleanupListener  

        

    

      

     

    

        

            org.springframework.security.web.session.HttpSessionEventPublisher   

        

    

  

     

    

       20 

    

    

    

  

   encodingFilter 

   org.springframework.web.filter.CharacterEncodingFilter 

  

    

  

   encodingFilter 

   /* 

  

    

  

   index.jsp 

  

 

 

 

  2、  application-security.xml文件的装备。application-servlet.xml装备不明白的参阅spring MVC3.0.5建立全程。

 

Xml代码  保藏代码

 

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.1.xsd">  

   

   

  

    

          use-expressions="true"   

        access-denied-page="/user/denied">  

   

                    always-use-default-target="true"  

                authentication-failure-url="/user/login?error=1"  

                login-processing-url="/logincheck"  

                authentication-success-handler-ref="successHandler"/>  

      

    

    

      

    

     

    

        

    

     

  

    

  

    

         

        

              

        

          

    

  

    

 

疑问:

 

    我自个写了个User完成UserDetails,发现同一个账号能够一起登入,也即是说concurrency-control没有起到作用,参阅了一下材料后,重写一下User的hashcode,equals办法就行了。【后来发现的疑问,附件自个增加】

 

    具体参阅:http://flashing.iteye.com/blog/823666

 

 

Java代码  保藏代码

@Override  

public int hashCode() {  

    return username.hashCode();  

}  

  

@Override  

public boolean equals(Object obj) {  

    User user = (User)obj;  

    return this.username.equals(user.getUsername());  

}  

 

解析:

     a、use-expressions

如:hasRole(‘ROLE_ADMIN’或hasIpAddress(‘127.0.0.1’))等,看不明白的能够参阅下面连接。

http://static.springsource.org/spring-security/site/docs/3.0.7.RELEASE/reference/el-access.html

http://hougbin.iteye.com/blog/1526980

http://kongcodecenter.iteye.com/blog/1320021

   b、

其特点hash即是加密的办法是什么?常用的可能是md5和sha吧。

首要说下盐值:不加这个特点,spring验证暗码时,直接用MD5加密后的值,与我们自个写的完成了UserDetailsService接口的类中loadUsersByUsername(String username)办法回来的UserDetails中的暗码进行对比;假如加了这个特点而且设置user-property=’username’[不知道能不能设置其他值,或许也能够设置password,没有尝试],加密前的明文就成为”暗码明文{盐值}”,这里的盐值为用户名。

   c、remember-me的完成战略参阅下面:

     http://static.springsource.org/spring-security/site/docs/3.0.x/reference/remember-me.html

     http://blog.csdn.net/small_love/article/details/6641316

     http://xyz20003.iteye.com/blog/223282

   d、UserDetailsService能够通过手艺设置几个用户的权限: