您现在的位置是:首页 > 文章详情

shiro的入门实例-shiro于spring的整合

日期:2018-11-29点击:653

shiro是一款java安全框架、简单而且可以满足实际的工作需要

第一步、导入maven依赖  

<!-- shiro --> <dependency>     <groupId>org.apache.shiro</groupId>     <artifactId>shiro-core</artifactId>     <version>${org.apache.shiro.version}</version> </dependency> <dependency>     <groupId>org.apache.shiro</groupId>     <artifactId>shiro-web</artifactId>     <version>${org.apache.shiro.version}</version> </dependency> <dependency>     <groupId>org.apache.shiro</groupId>     <artifactId>shiro-spring</artifactId>     <version>${org.apache.shiro.version}</version> </dependency> <dependency>     <groupId>org.apache.shiro</groupId>     <artifactId>shiro-ehcache</artifactId>     <version>${org.apache.shiro.version}</version> </dependency>

第二步、在项目中定义shiro的过滤器(shiro的实现主要是通过filter实现)

<!-- Shiro Security filter --> <filter>     <filter-name>shiroFilter</filter-name>     <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>     <init-param>     <param-name>targetFilterLifecycle</param-name>     <param-value>true</param-value>     </init-param> </filter> <filter-mapping>     <filter-name>shiroFilter</filter-name>     <url-pattern>/*</url-pattern>     <dispatcher>REQUEST</dispatcher> </filter-mapping>

第三步、创建一个Realm

public class UserRealm extends AuthorizingRealm {     @Autowired     private UserBiz biz;     //验证用户信息,认证的实现     @Override     protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {         String userno = (String) authenticationToken.getPrincipal();         String password = new String((char[]) authenticationToken.getCredentials());         Result<RcUser> result = biz.login(userno, password);         if (result.isStatus()) {             Session session = SecurityUtils.getSubject().getSession();             session.setAttribute(Constants.Token.RONCOO, userno);             RcUser user = result.getResultData();             return new SimpleAuthenticationInfo(user.getUserNo(), user.getPassword(), getName());         }         return null;     }     //验证用户的权限,实现认证     @Override     protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {         SimpleAuthorizationInfo authorizationInfo = new SimpleAuthorizationInfo();         String userno = (String) principals.getPrimaryPrincipal();         Result<RcUser> result = biz.queryByUserNo(userno);         if(result.isStatus()){             Result<List<RcRole>> resultRole = biz.queryRoles(result.getResultData().getId());             if(resultRole.isStatus()){                 //获取角色                 HashSet<String> roles = new HashSet<String>();                 for (RcRole rcRole : resultRole.getResultData()) {                     roles.add(rcRole.getRoleValue());                 }                 System.out.println("角色:"+roles);                 authorizationInfo.setRoles(roles);                 //获取权限                 Result<List<RcPermission>> resultPermission = biz.queryPermissions(resultRole.getResultData());                 if(resultPermission.isStatus()){                     HashSet<String> permissions = new HashSet<String>();                     for (RcPermission rcPermission : resultPermission.getResultData()) {                         permissions.add(rcPermission.getPermissionsValue());                     }                     System.out.println("权限:"+permissions);                     authorizationInfo.setStringPermissions(permissions);                 }             }         }         return authorizationInfo;     } }

第四步、添加shiro配置

1、shiro缓存 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE xml> <ehcache updateCheck="false" name="shiroCache"> <!-- http://ehcache.org/ehcache.xml -->     <defaultCache             maxElementsInMemory="10000"             eternal="false"             timeToIdleSeconds="120"             timeToLiveSeconds="120"             overflowToDisk="false"             diskPersistent="false"             diskExpiryThreadIntervalSeconds="120"             /> </ehcache> 2、在spring的core配置文件中配置shiro <description>Shiro安全配置</description> <bean id="userRealm" class="com.roncoo.adminlte.controller.realm.UserRealm" />  <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager"> <property name="realm" ref="userRealm" /> <property name="cacheManager" ref="shiroEhcacheManager" /> </bean> <!-- Shiro 过滤器 --> <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean"> <!-- Shiro的核心安全接口,这个属性是必须的 --> <property name="securityManager" ref="securityManager" /> <!-- 身份认证失败,则跳转到登录页面的配置 --> <property name="loginUrl" value="/login" /> <property name="successUrl" value="/certification" /> <property name="unauthorizedUrl" value="/error" /> <!-- Shiro连接约束配置,即过滤链的定义 --> <property name="filterChainDefinitions"> <value> /login = authc /exit = anon /admin/security/list=authcBasic,perms[admin:read] /admin/security/save=authcBasic,perms[admin:insert] /admin/security/update=authcBasic,perms[admin:update] /admin/security/delete=authcBasic,perms[admin:delete] </value> </property> </bean> <!-- 用户授权信息Cache, 采用EhCache --> <bean id="shiroEhcacheManager" class="org.apache.shiro.cache.ehcache.EhCacheManager"> <property name="cacheManagerConfigFile" value="classpath:ehcache/ehcache-shiro.xml" /> </bean> <!-- 保证实现了Shiro内部lifecycle函数的bean执行 --> <bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor" /> <!-- AOP式方法级权限检查 --> <bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator" depends-on="lifecycleBeanPostProcessor"> <property name="proxyTargetClass" value="true" /> </bean> <bean class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor"> <property name="securityManager" ref="securityManager" /> </bean>


第五步、shiro退出登录的实现

        第一种方式         /**  * 退出登陆操作  */ @RequestMapping(value = "/exit", method = RequestMethod.GET) public String exit(RedirectAttributes redirectAttributes, HttpSession session) { session.removeAttribute(Constants.Token.RONCOO); SecurityUtils.getSubject().logout(); redirectAttributes.addFlashAttribute("msg", "您已经安全退出"); return redirect("/login"); } 第二种方式:在shiroFilter的约束配置中配置 <!-- Shiro连接约束配置,即过滤链的定义 --> <property name="filterChainDefinitions"> <value>     /exit = logout </value> </property> 


原文链接:https://blog.roncoo.com/article/127184
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章