




已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Shiro1.1.0开发配置文档在NetBeans7.0中使用Shiro1.1.0的实例建立一个java应用程序项目,项目及文件结构如图:注意以下几点:1、导入与Shiro相关的库,如图所示几个jar包,如运行时出现log4j相关的错误,则可能是log4j相关的包不正确;2、shiro.ini文件的路径问题,应放在项目根路径下,内容为:view plain1. users2. zwx=zavens3、perties文件为可选文件,建议自己设置log4j属性,内容为:view plain1. log4j.rootLogger=TRACE,stdout2. 3. log4j.appender.stdout=org.apache.log4j.DailyRollingFileAppender4. log4j.appender.stdout.File=C:/log4j/log.txt5. log4j.appender.stdout.Encoding=GBK6. log4j.appender.stdout.Threshold=DEBUG7. log4j.appender.stdout.DatePattern=.yyyy-MM-dd8. log4j.appender.stdout.layout=org.apache.log4j.PatternLayout9. log4j.appender.stdout.layout.ConversionPattern=%dABSOLUTE%5p%c1:%L:%m%n10. 11. .sf.ehcache=WARN12. .apache=WARN13. .quartz=WARN14. .apache.shiro=TRACE15. .apache.shiro.util.ThreadContext=INFOperties详细配置,请看:perties资源配置文件4、shiroAp.java内容:view plain1. packageshiroap;2. 3. importjava.io.File;4. importjava.io.IOException;5. importorg.apache.shiro.SecurityUtils;6. importorg.apache.shiro.authc.UsernamePasswordToken;7. importorg.apache.shiro.config.IniSecurityManagerFactory;8. importorg.apache.shiro.mgt.SecurityManager;9. importorg.apache.shiro.subject.Subject;10. importorg.apache.shiro.util.Factory;11. 12. publicclassShiroAp13. 14. publicstaticvoidmain(Stringargs)throwsIOException15. Factoryfactory=newIniSecurityManagerFactory(shiro.ini);16. SecurityManagersm=factory.getInstance();17. SecurityUtils.setSecurityManager(sm);18. Subjectsub=SecurityUtils.getSubject();19. if(sub.isAuthenticated()20. System.out.println(已登录,SESSION:+sub.getSession();21. 22. System.out.println(未登录,SESSION:+sub.getSession();23. UsernamePasswordTokenat=newUsernamePasswordToken(zwx,zavens);24. try25. sub.login(at);26. catch(Exceptione)27. System.out.println(验证没通过!);28. 29. if(sub.isAuthenticated()30. System.out.println(已登录,SESSION:+sub.getSession();31. 32. 33. 实例下载shiro配置文件路径问题的探索Shiro是一个简单、开源且强大的安全管理框架,是实现单点登录的理想选择,常被应用于java web应用中。在java web中使用shiro时,可以使用一个INI文件对shiro进行配置,这仅需要在web.xml中配置一下IniShiroFilter的一个参数configPath,然而在配置时,文件的路径问题却出来了,例如,我将shiro.ini文件放在/WEB-INF文件夹下面,然后再web.xml中配置如下:view plain1. 2. ShiroFilter3. org.apache.shiro.web.servlet.IniShiroFilter4. 5. configPath6. /WEB-INF/shiro.ini7. 8. 9. 10. ShiroFilter11. /*12. 在部署时,会提示找不着shiro.ini文件。注意,我使用的环境是netbeans 7.0.1+ glassfish 3.1 。究其原因,我直接找到了IniShiroFilter的源码,其在初始化时,会调用ini(),ini()调用configure(),configure()又调用loadIniFromConfig()或者loadIniFromPath(),其中前者对应IniShiroFilter的另一个参数config,后者对应参数configPath,继续查loadIniFromPath(),发现它又调用convertPathToIni(),convertPathToIni()接着又调用ini.loadFromPath(),至此跳出了IniShiroFilter的函数调用;继续查ini类,打开其源码,找到loadFromPath(),它又调用ResourceUtils.getInputStreamForPath(),找到ResourceUtils类的getInputStreamForPath()方法,源码如下:view plain1. publicstaticInputStreamgetInputStreamForPath(StringresourcePath)throwsIOException2. 3. InputStreamis;4. if(resourcePath.startsWith(CLASSPATH_PREFIX)5. is=loadFromClassPath(stripPrefix(resourcePath);6. 7. elseif(resourcePath.startsWith(URL_PREFIX)8. is=loadFromUrl(stripPrefix(resourcePath);9. 10. elseif(resourcePath.startsWith(FILE_PREFIX)11. is=loadFromFile(stripPrefix(resourcePath);12. 13. else14. is=loadFromFile(resourcePath);15. 16. 17. if(is=null)18. thrownewIOException(Resource+resourcePath+couldnotbefound.);19. 20. 21. returnis;22. web.xml中配置的configPath参数的路径值被传递到了resourcePath参数,却发现其分3类情况处理,分别是CLASSPATH、URL、FILE三种位置,且路径格式有特殊规定:view plain1. /*2. *Resourcepathprefixthatspecifiestoloadfromaclasspathlocation,valueiscodeclasspath:3. */4. publicstaticfinalStringCLASSPATH_PREFIX=classpath:;5. /*6. *Resourcepathprefixthatspecifiestoloadfromaurllocation,valueiscodeurl:7. */8. publicstaticfinalStringURL_PREFIX=url:;9. /*10. *Resourcepathprefixthatspecifiestoloadfromafilelocation,valueiscodefile:11. */12. publicstaticfinalStringFILE_PREFIX=file:;至此,我们知道,其路径需要一个前缀,如果是使用类路径,则在前面加classpath:,比如 classpath:shiro.ini,如果使用文件路径,则在前面加file:,比如 e:shiro.ini,如果使用网路路径,同样在前面加url:,如url:/shiro.ini,如果没有前缀,则默认是使用文件路径。那为什么,我们使用文件路径/WEB-INF/shiro.ini又不对呢?于是,我使用java创建一个文件,代码如下:view plain1. privatevoidcreateFile(Stringuri)2. try3. Filefile=newFile(uri);4. if(!file.exists()5. if(!file.createNewFile()6. thrownewException(文件不存在,创建失败!);7. 8. 9. catch(Exceptione)10. System.out.println(e.getMessage();11. 12. 调用createFile(222.ini)时,发现222.ini文件被创建在glassfish的域目录根目录下面,也就是C:glassfish-3.1.1glassfishdomainsdomain1下。调用createFile(/222.ini)时,这个文件被创建在c:根目录下。终于明白了,原来是netbeans捣的鬼,在调试时,netbeans会将项目文件部署到glassfish的域中去,如果直接在JAVA代码中使用路径,则都是相对域进行的。其实这也是shiro 1.1的不足之处,shiro在配置路径参数时,没有对该路径进行处理,而是直接将路径传递过去。后又在/web.html中发现这样一句话:view plain1. ServletContextresourcepaths-Shiro1.2+2. ServletContextresourcepathsareanupcomingfeatureinShiro1.2.Until1.2hasbeenreleased,allconfigPathdefinitionsmustspecifyaclasspath:,file:orurl:prefix.ServletContext 资源路径是一个即将在1.2中实现的特性,在1.2发布之前,所有configPath参数的定义,必须指定classpath:, file: or url:中的一个前缀。期待shiro1.2能尽快发布!另外1、使用classpath:前缀的时候,可将shiro.ini拷贝到C:glassfish-3.1.1glassfishdomainsdomain1lib下即可,或者使用包目录,如:classpath:cn/org/lycz/www/mb/shiro.ini。2、IniShiroFilter还有一个参数config,可以将shiro.ini中的内容直接写在web.xml中,如:view plain1. 2. ShiroFilter3. org.apache.shiro.web.servlet.IniShiroFilter4. 5. config6. 7. users8. zwx=zavens9. 10. 11. 12. 13. ShiroFilter14. /*15. 在WEB应用中使用mysql部署shiro安全框架shiro框架提供了验证、授权、加密、会话管理等常用的安全功能,而且使用POJO式的API使得该框架能部署在大多数的环境中,此外还针对不同的情形提供了各种API实现,在数据存储上,其开放式的API使得我们在不同数据环境中进行方便自如的切换,shiro同样支持MYSQL方式,下面是使用MYSQL数据库的SHIRO配置:view plain1. main2. ds=com.mysql.jdbc.jdbc2.optional.MysqlDataSource3. ds.serverName=74. ds.user=root5. ds.password=zavens6. ds.databaseName=users7. ds.url=jdbc:mysql:/7:3306/zavens8. jdbcRealm=org.apache.shiro.realm.jdbc.JdbcRealm9. jdbcRealm.permissionsLookupEnabled=true10. jdbcRealm.authenticationQuery=SELECTpasswordFROMusersWHEREusername=?11. jdbcRealm.userRolesQuery=SELECTrolenameFROMuser_rolesWHEREusername=?12. jdbcRealm.permissionsQuery=SELECTpermissionFROMrole_permissionsWHERErolename=?13. jdbcRealm.dataSource=$ds14. 15. authc.loginUrl=/login.xhtml16. perms.unauthorizedUrl=/login.xhtml17. roles.unauthorizedUrl=/login.xhtml18. urls19. /admin/*=authc,permsjimi20. /system/*=authc,permsjuemi这里需要说明的是,jdbcRealm.authenticationQuery,jdbcRealm.userRolesQuery,jdbcRealm.permissionsQuery配置行,相对应的时三个表users,user_roles,role_permissions,这三行是告诉SHIRO从何处获取授权的配置,他们是jdbc的预查询语句。authenticationQuery用于从users中查找密码来进行验证,查询后取得第一条记录的第一个字段进行验证。userRolesQuery用于从user_roles查找所属的角色,它可以是多行,但是要保证查询后的角色是第一个字段。permissionsQuery用于从role_permissions中查找权限字符串,同样要求是第一个字段,可以是多条记录。当告诉SHIRO从哪里获取授权后,还得告诉SHIRO对谁进行授权。urls部分就是起这个作用。/admin/*=authc,permsjimi 这句,/admin/*是指针对admin目录配置权限,authc,是系统内置的过滤器,告诉shiro,进入此目录,必须是已验证的登录用户。permsjimi 是权限限定符,perms同样是内置的过滤器,指org.apache.shiro.web.filter. authz.PermissionsAuthorizationFilter,jimi是通过jdbcRealm.permissionsQuery查询出来的权限字符串,只有用户获得的角色含有该字符串,才能获得访问授权。如果针对角色授权,可以是/admin/*=a
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 汉字硬笔书法课件
- 天津市南开区2024-2025学年八年级(下)期末物理试卷(含解析)
- 汉字形声字课件
- 安徽省合肥市百花中学等四校联考2024-2025学年高一下学期7月期末考试地理试卷(含答案)
- 3D打印技术与应用 知到智慧树见面课答案
- 社会化电商的发展现状与挑战
- 体感游戏产业市场潜力及商机分析
- 美容美发行业市场调研与创新发展
- T-QGCML 4835-2025 板翅式换热器翅片成型和打孔生产线
- 军事理论与国防教育知到智慧树答案
- 2025年燃气电厂笔试题库及答案
- 2025年道路运输两类人员安全员考试考核试题库答案
- 2025年学法减分试题及答案
- 《智能建造概论》高职完整全套教学课件
- 2025年教育综合理论知识试题及答案
- 超声科进修学习汇报
- 2024年甘肃省舟曲县邮政公开招聘工作人员试题带答案详解
- 2025年小学英语(2022版)新课程标准考试测试卷及答案(共四套)
- (高清版)DB34∕T 5193-2025 河流水生态监测技术规范
- 2025年德语DSH考试试卷德语语法练习与解析
- 肥料行业车间管理制度
评论
0/150
提交评论