wayne_liberary / Shiro / 权限控制 Shiro采用JdbcRealm(JNDI)

分享

   

权限控制 Shiro采用JdbcRealm(JNDI)

2014-10-17  wayne_lib...

1.在web.xml中添加过滤器

 

 

Xml代码  收藏代码
  1. <filter>  
  2.     <filter-name>ShiroFilter</filter-name>  
  3.     <filter-class>org.apache.shiro.web.servlet.IniShiroFilter</filter-class>  
  4. </filter>  
  5. <filter-mapping>  
  6.     <filter-name>ShiroFilter</filter-name>  
  7.     <url-pattern>/*</url-pattern>  
  8. </filter-mapping>  

 

注意:此段代码的放置位置也是需要注意的,比如我就将其放置在web.xml中最前的位置。否则,shiro可能不会起到效果,甚至会造成其它未知错误。

 

2.在项目的classpath路径(和java文件同一目录下  src 下)下添加 shiro.ini文件

 

注意:此处采用oracle数据库(其它数据库配置形式相同,比较简单,倒是oracle配置略有差别)

 

 

Xml代码  收藏代码
  1. [main]  
  2. ds = oracle.jdbc.pool.OracleDataSource  
  3. ds.driverType=thin  
  4. ds.networkProtocol=tcp  
  5. ds.serverName=192.168.32.13  
  6. ds.databaseName = orcl  
  7. ds.portNumber=1521  
  8. ds.user = lanwan  
  9. ds.password = ustclanwan  
  10. jdbcRealm = org.apache.shiro.realm.jdbc.JdbcRealm  
  11. jdbcRealm.permissionsLookupEnabled = true  
  12. jdbcRealm.authenticationQuery = select login_pwd from sys_c_ul  where worker_code=?  
  13. jdbcRealm.userRolesQuery = select role_id from sys_j_ur  where worker_id=?  
  14. jdbcRealm.permissionsQuery=select file_id from sys_j_rrs  where role_id in(select role_id from sys_j_ur  where worker_id=?)  
  15. jdbcRealm.dataSource = $ds  
  16. [filters]  
  17. authc.loginUrl = index.jsp  
  18. [urls]  
  19. /index.jsp = anon  

 其中:

 

Xml代码  收藏代码
  1. jdbcRealmjdbcRealm.authenticationQuery =  
  2. jdbcRealm.userRolesQuery =   
  3. jdbcRealm.permissionsQuery=  

 

可以根据需要自定义。

 

另附上采用JNDI数据源的用法:

 

Xml代码  收藏代码
  1. [main]  
  2. ds = org.apache.shiro.jndi.JndiObjectFactory   
  3. ds.resourceName = java:jboss/datasources/IPSST  
  4. ds.requiredType = javax.sql.DataSource   
  5. jdbcRealm = org.apache.shiro.realm.jdbc.JdbcRealm  
  6. jdbcRealm.permissionsLookupEnabled = true  
  7. jdbcRealm.authenticationQuery = select login_pwd from hr_j_emp_info  where emp_name=?  
  8. jdbcRealm.dataSource = $ds  
  9. [filters]  
  10. authc.loginUrl = index.jsp  
 

 

 

3、在java文件中进行登录操作(非本文重点,本文只是想记录使用jndi的用法),只是做了登录,角色、权限可产考其它文章。

 

 

Java代码  收藏代码
  1. String loginAccount=request.getParameter("userCode");  
  2. String pwd=request.getParameter("pwd");  
  3. Subject subject = SecurityUtils.getSubject();  
  4.           
  5. String MD5Str=  
  6. SecurityManager.GetMD5Str32(SecurityManager.GetMD5Str32(pwd));  
  7.   
  8. UsernamePasswordToken token =  
  9.  new UsernamePasswordToken(loginAccount,MD5Str);  
  10.   
  11. try {  
  12.   subject.login(token);  
  13. token.setRememberMe(true);  
  14. } catch (UnknownAccountException uae) {  
  15.     return loginFailed();  
  16. } catch (IncorrectCredentialsException ice) {  
  17.     return loginFailed();  
  18. } catch (LockedAccountException lae) {  
  19.     return loginFailed();  
  20. } catch (AuthenticationException ae){  
  21.     return loginFailed();  
  22. }  
 

 

 

 

 

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多
    喜欢该文的人也喜欢 更多

    ×
    ×

    ¥.00

    微信或支付宝扫码支付:

    开通即同意《个图VIP服务协议》

    全部>>