菜鸟级别的Shiro配置、使用案例(一)
来源:互联网 发布:淘宝瑕疵大牌化妆品 编辑:程序博客网 时间:2024/06/05 11:47
菜鸟级别的Shiro配置、使用案例(一)
- 菜鸟级别的Shiro配置使用案例一
- 一配置环境
- 1使用Java SE环境的配置此
- 2使用Java EE环境的配置此
- 3不会使用maven的看我上一篇教程
- 4懒得配置的自己去官网下jar包
- 二配置文件 Shiroini
- 1Shiro使用ini作为配置文件
- 2注册Shiro
- 三使用Shiro
- 1完善配置文件
- 2登录
- 2注销
- 结束语
- 一配置环境
一、配置环境
我这里使用的是maven在web环境下的配置
附上maven依赖
1、使用Java SE环境的配置此
<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.21</version></dependency><dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-core</artifactId> <version>1.2.4</version></dependency>
2、使用Java EE环境的配置此
<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.21</version></dependency><dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-web</artifactId> <version>1.2.4</version></dependency>
3、不会使用maven的看我上一篇教程
http://blog.csdn.net/qq_32583189/article/details/51207873
4、懒得配置的自己去官网下jar包
http://central.maven.org/maven2/org/apache/shiro/shiro-web/1.2.4/shiro-web-1.2.4.jar
http://mvnrepository.com/artifact/org.apache.shiro/shiro-core/1.2.4
http://central.maven.org/maven2/org/slf4j/slf4j-api/1.7.21/slf4j-api-1.7.21.jar
http://central.maven.org/maven2/commons-beanutils/commons-beanutils/1.9.2/commons-beanutils-1.9.2.jar
二、配置文件 Shiro.ini
1,Shiro使用ini作为配置文件
在classPath(与包同级的目录,比如你的包com.doservlet.framework在src目录下,src就是你的classPath)目录下创建一个shiro.ini文件
[main]authc.loginUrl=/login[urls]/=anon/login=anon/customer/**=authc
以上参数的意思
authc.loginUrl=/login
用户验证资源地址是/login
/=anon/login=anon/customer/**=authc
匿名用户可以访问/资源,/login资源
但是/customer/下的所有资源都只能由验证过的用户访问
这里等号左侧为资源,等号右侧是授权状态
其实在原理是使用了过滤器,后面会讲到自己配置一个过滤器
以下提供一些过滤器仅供参考
authc.successUrl=/
#认证成功后重定向到此资源
authc.usernameParam=username
#从请求参数中获取key=username的value作为用户名
authc.passwordParam=password
#从请求参数中获取key=password的value作为密码
authc.rememberMeParam=rememberMe
#从请求参数中获取key=rememberMe的value作为是否记住密码的标识 logout 结束会话 logout.redirectUrl=/
#结束会话后重定向到此资源 port 指定请求端口 port=8080
#8080端口的请求可通过
2,注册Shiro
方式一,使用java代码(在一个可以执行初始化操作的地方,比如ServletContainerInitializer的子类的onStartUp方法里,或者一个注册了loadOnStartUp的Servlet的init方法里)
@Overridepublic void init(ServletConfig config) throws ServletException { ServletContext servletContext = config.getServletContext(); //设置初始化参数 servletContext.setInitParameter("shiroConfigLocation", "classPath:shiro.ini"); //注册Listener servletContext.addListener(EnvironmentLoaderListener.class); //注册filter Dynamic dynamic = servletContext.addFilter("ShiroFilter", ShiroFilter.class); dynamic.addMappingForUrlPatterns(null, false, "/*");}
方式二、在web.xml中配置
<context-param> <param-name>shiroConfigLocation</param-name> <param-value>classPath:shiro.ini</param-value></context-param><listener> <listener-class>org.apache.shiro.web.env.EnvironmentLoaderListener</listener-class></listener><filter> <filter-name>ShiroFilter</filter-name> <filter-class>com.doservlet.plugin.security.SmartSecurityFilter</filter-class></filter><filter-mapping> <filter-name>ShiroFilter</filter-name> <url-pattern>/*</url-pattern></filter-mapping>
三、使用Shiro
1,完善配置文件
使用之前需要在Shiro.ini文件中加上一些必要的信息
因为验证身份的信息是存在数据库中的,所以这里需要告诉Shiro数据库信息
这里需要使用者导入两个包一个是MySQL的桥接器,还是一个是数据库连接池
maven使用
<!-- http://mvnrepository.com/artifact/mysql/mysql-connector-java --><dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.38</version></dependency><!-- http://mvnrepository.com/artifact/org.apache.commons/commons-dbcp2 --><dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-dbcp2</artifactId> <version>2.1.1</version></dependency>
也可以自行下载
http://central.maven.org/maven2/mysql/mysql-connector-java/5.1.38/mysql-connector-java-5.1.38.jar
http://central.maven.org/maven2/org/apache/commons/commons-dbcp2/2.1.1/commons-dbcp2-2.1.1.jar
如果关于如何使用数据库还有问题,请先去学习。
环境配置完成后在shiro.ini中添加信息
ds=org.apache.commons.dbcp2.BasicDataSourceds.driverClassName=com.mysql.jdbc.Driverds.url=jdbc:///mydbds.username=rootds.password=rootjdbcRealm=org.apache.shiro.realm.jdbc.JdbcRealmjdbcRealm.dataSource=$ds
配置完这些后,你的Shiro就能访问到你的数据库了
但是这还没完,因为你的Shiro并不知道你的数据表结构,所以你要给他指定sql语句
假设你现在已经有了一个名为mydb的数据库,用户表 结构如下
user
下面添加一个查询用户密码的语句到shiro.ini中
jdbcRealm.authenticationQuery=select password from user where username=?
Shiro还提供了一个强大的机制就是用户角色管理
我们先创建一个表 role 里面存放角色名
表结构
增加几条数据
现在我们还需要一张表来说明用户与角色的关系,名字就叫做user_role
下面添加一个查询用户角色的语句到shiro.ini中
jdbcRealm.userRolesQuery=select role.role_name from user,user_role,role where user.id =user_role.user_id and role.id=user_role.role_id and user.username=?
Shiro提供用户角色管理的目的就是为了管理权限
我们先创建一个表 permission 里面存放权限名
表结构
增加几条数据
现在我们还需要一张表来说明用户角色与权限的关系,名字就叫做role_permission
下面添加一个查询角色权限的语句到shiro.ini中
jdbcRealm.permissionsQuery=select permission.permission_name from role,role_permission,permission where role.id =role_permission.role_id and permission.id=role_permission.permission_id and role.role_name=?jdbcRealm.permissionsLookupEnabled=true
现在将以上sql语句的配置注册到shiro的管理器中,只需要再加上一句话
securityManager.realms=$jdbcRealm
当然,Shiro频繁的数据库访问会有相当大的性能开销,这里我们在main中配置
cacheManager=org.apache.shiro.cache.MemoryConstrainedCacheManagersecurityManager.cacheManager=$cacheManager
按照规范,开发人员不能在数据库中存储和使用明文密码,仍在在main中配置
passwordMatcher=org.apache.shiro.authc.credential.PasswordMatcherjdbcRealm.credentialsMatcher=$passwordMatcher
既然在查询的时候我们使用了加密的方式,那么将密码存储到数据库中时我们只需要使用Shiro提供的接口
PasswordService service=new DefaultPasswordService();String encryptedPassword = service.encryptPassword(password);//只需要将encryptedPassword存入数据库
2,登录
public static void login(String username, String password) { Subject currentUser = SecurityUtils.getSubject(); if (currentUser != null) { UsernamePasswordToken token = new UsernamePasswordToken(username,password); try { currentUser.login(token); } catch (Exception e) { l.error("login failure", e); throw new RuntimeException(e); } }}
2,注销
public static void logout() { Subject currentUser = SecurityUtils.getSubject(); if (currentUser != null) { currentUser.logout(); }}
结束语
这里只是基本的配置,后续还会有更深入的使用教程提供
转载请注明出处 scdn 陈小默
http://blog.csdn.net/qq_32583189
- 菜鸟级别的Shiro配置、使用案例(一)
- 菜鸟级别的Shiro配置、使用案例(一)
- Shiro的使用(一)
- 案例——商品展示 菜鸟级别的我
- 查询数据展示案例 菜鸟级别的我
- 案例——天气预报 菜鸟级别的我
- SpringMVC+Apache Shiro+JPA(hibernate)案例教学(一)整合配置
- SpringMVC+Apache Shiro+JPA(hibernate)案例教学(一)整合配置
- shiro使用案例
- Shiro的配置与使用
- shiro 标签使用(一)
- Spring Shiro配置案例分析
- 菜鸟级别的问题:如何配置Java环境变量
- shiro的简单使用(使用ini配置)
- java使用安全的PreparedStatement操作mysql数据库(菜鸟入门级别的)
- 菜鸟级别的使用SqlParameter防止注入式攻击
- Shiro的介绍(一)
- Shiro权限管理(shiro框架--案例)
- eclipse + pydev 创建django项目
- JSP简介
- spring通知-BeforeAdvice和AfterReturningAdvice
- split()方法字符串拆分
- 我生命中的钱事:创业!
- 菜鸟级别的Shiro配置、使用案例(一)
- stl set的用法
- SQL Server中常用的日期时间函数
- Android中使用Gson解析JSON数据的方法
- 《机器学习实战》预测数值型数据-回归(Regression)
- 阿里云VPS_Ubuntu安装python Xpath插件
- iOS开发——Cocoapods的安装和使用
- 第九周项目3-人数不定的工资类
- 30分钟上手最火android网络请求框架Retrofit