shiro入门

来源:互联网 发布:python运维流程系统 编辑:程序博客网 时间:2024/06/15 09:47

shiro笔记

加入依赖:

<dependency>    <groupId>org.apache.shiro</groupId>    <artifactId>shiro-core</artifactId>    <version>1.4.0</version></dependency><dependency>      <groupId>commons-logging</groupId>      <artifactId>commons-logging</artifactId>      <version>1.2</version>  </dependency>


十分钟入门

public static void main(String[] args) {//从ini中读取权限信息构建SecurityManager对象Factory<org.apache.shiro.mgt.SecurityManager> factory = new IniSecurityManagerFactory("classpath:my.ini");          org.apache.shiro.mgt.SecurityManager securityManager = (org.apache.shiro.mgt.SecurityManager)factory.getInstance();          SecurityUtils.setSecurityManager(securityManager);  //获取当前用户Subject currentUser = SecurityUtils.getSubject();//当前用户的回话Session session = currentUser.getSession();//判断是否登录 未登录才需要登录/**           * 用户包括两部分            *    principals and credentials           *     principals(本人)表示用户的标识信息 比如用户名 用户地址等           *     credentials(凭证)表示用户用于登录的凭证 比如密码 证书等           */  if ( !currentUser.isAuthenticated() ) {UsernamePasswordToken token = new UsernamePasswordToken("jiaozi", "123456");//设置记住密码token.setRememberMe(true);try {    currentUser.login( token );    System.out.println("登录成功");    System.out.println(currentUser.isAuthenticated());    System.out.println(currentUser.isRemembered());    //检查登录后的用户是否拥有某个角色    if(currentUser.hasRole("role1")){    System.out.println("是否拥有role1的角色 ");    }    if(currentUser.isPermitted("user:query:1")){    System.out.println("拥有查询1号的权限");    }} catch ( UnknownAccountException uae ) {    System.out.println("账号错误");} catch ( IncorrectCredentialsException ice ) {    System.out.println("密码不匹配");} catch ( LockedAccountException lae ) {   System.out.println("账号被锁定");} catch ( AuthenticationException ae ) {    System.out.println("位置异常");}}}}


Ini配置:

1. # =======================  

2. # Shiro INI configuration  

3. # =======================  

4.   

5. [main]  

6.   

7. [users]  

8. # 设置用户信息  

9. # 语法是 username = password, roleName1, roleName2, …, roleNameN  

10. jiaozi = 123456,role1  

11.   

12. [roles]  

13. # 角色信息和角色拥有的权限  

14. #语法是 rolename = permissionDefinition1, permissionDefinition2, …, permissionDefinitionN  

15. #权限的语法 * 表示所有权限  一般语法是 权限类型.权限动作.权限的资源id  比如  user:delete:1 表示拥有删除1号用户的权限  user:delete:*表示删除所有用户权限  

16. admin = *  

17. role1 = user:query:*, user:delete:1  

18.   

19. [urls]  

20. # web中的url过滤  

 

加入web程序:

加入依赖:

<dependency>      <groupId>org.apache.shiro</groupId>      <artifactId>shiro-web</artifactId>      <version>1.4.0</version>  </dependency>


web.xml添加shiro支持的过滤器和ini文件路径配置参数

1. <context-param>  

2.     <param-name>shiroConfigLocations</param-name>  

3.     <param-value>/WEB-INF/shiro.ini</param-value>  

4.   </context-param>  

5.   <listener>  

6.     <listener-class>org.apache.shiro.web.env.EnvironmentLoaderListener</listener-class>  

7.   </listener>  

8.   <filter>  

9.     <filter-name>ShiroFilter</filter-name>  

10.     <filter-class>org.apache.shiro.web.servlet.ShiroFilter</filter-class>  

11.   </filter>  

12.   <filter-mapping>  

13.     <filter-name>ShiroFilter</filter-name>  

14.     <url-pattern>/*</url-pattern>  

15.     <dispatcher>REQUEST</dispatcher>  

16.     <dispatcher>FORWARD</dispatcher>  

17.     <dispatcher>INCLUDE</dispatcher>  

18.     <dispatcher>ERROR</dispatcher>  

19.   </filter-mapping>  

登录页面:

<form action="LoginServlet" method="post">       用戶名 :<input type="text" name="userName"/>     密碼:<input type="text" name="password"/>     <input type="submit">    </form>  


配置ini:

[main]#当登陆不成功是自动跳转到登陆页面  authc.loginUrl=/login.html#认证(输入用户名和密码登录)不通过  自动跳转loginUrlroles.loginUrl=/login.html#授权(没有某个角色和权限) 不通过roles.unauthorizedUrl=/un.htmlperms.loginUrl=/login.htmlperms.unauthorizedUrl=/un.html[users]  # 设置用户信息  # 语法是 username = password, roleName1, roleName2, …, roleNameN  jiaozi = 123456,role1    [roles]  # 角色信息和角色拥有的权限  #语法是 rolename = permissionDefinition1, permissionDefinition2, …, permissionDefinitionN  #权限的语法 * 表示所有权限  一般语法是 权限类型.权限动作.权限的资源id  比如  user:delete:1 表示拥有删除1号用户的权限  user:delete:*表示删除所有用户权限  admin = *  role1 = user:query:*, user:delete:1    [urls]  # web中的url过滤  访问这个页面时 要求你登录的账号  必须拥有某些权限/login.html = anon/scu.jsp = perms[user:delete:2]


 

原创粉丝点击