java Spring Security 总结二 2

    那么我们要扩展获得更多的用户信息,就要从这里下手了(数据库表这里不在列出来,可以参考项目的WebRoot/db目录下的schema.sql文件)。比如我们自己的数据库设计中是通过一个loginId和用户名来登录或者我们需要额外ID,EMAIL地址等信息,MySecurityJdbcDaoImpl实现如下:

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->  1  protectedclass UsersByUsernameMapping  extends  MappingSqlQuery {
 2 
 3          protected  UsersByUsernameMapping(DataSource ds) {
 4 
 5              super (ds, usersByUsernameQuery);
 6 
 7             declareParameter( new  SqlParameter(Types.VARCHAR));
 8 
 9             compile();
10 
11         }
12 
13          protected  Object mapRow(ResultSet rs,  int  rownum)  throws  SQLException {
14 
15              //  TODO Auto-generated method stub
16 
17             String userName  =  rs.getString( 1 );
18 
19             String passWord  =  rs.getString( 2 );
20 
21              boolean  enabled  =  rs.getBoolean( 3 );
22 
23             Integer userId  =  rs.getInt( 4 );
24 
25             String email  =  rs.getString( 5 );
26 
27         MyUserDetails user  =   new  MyUser(userName, passWord, enabled,  true
28                                                 true , true new  GrantedAuthority[]{ new  
29                                                 GrantedAuthorityImpl( " HOLDER " )});
30 
31             user.setEmail(email);
32 
33             user.setUserId(userId);
34 
35              return  user;
36 
37         }
38 
39  }

    如果你已经看过源代码,你会发现这里只是其中的一部分代码 ,具体的实现请看项目的MySecurityJdbcDaoImpl类实现,以及MyUserDetails和MyUser类,这里步在一一列出。

    如果使用Hibernate来操作数据库,你也可以从你的DAO中获取用户信息,最后你只要将存放了用户身份信息和权限信息的列表(List)返回给系统就可以。

    每当用户请求一个受保护的资源时,就会调用认证管理器以获取用户认证信息,但是如果我们的用户信息保存在数据库中,那么每次请求都从数据库中获取信息将会影响系统性能,那么将用户信息进行缓存就有必要了,下面就介绍如何在Spring Security中使用缓存。

你可能感兴趣的:(java,spring,Hibernate,Security,项目管理)