shiro框架--权限管理
Posted kokosili
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shiro框架--权限管理相关的知识,希望对你有一定的参考价值。
一.maven坐标
1 <!-- 权限控制 框架 --> 2 <dependency> 3 <groupId>org.apache.shiro</groupId> 4 <artifactId>shiro-all</artifactId> 5 <version>${shiro.version}</version> 6 </dependency>
二.shiro框架的四大功能
1.认证
2.授权
3.加密
4.权限管理
三.shiro框架环境搭建
1.导入maven坐标
2.在web.xml中配置spring提供的框架,用户整合shiro框架
1 <!-- 配置spring框架过滤器用于整合shiro框架 --> 2 <filter> 3 <filter-name>shiroFilter</filter-name> 4 <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> 5 </filter> 6 <filter-mapping> 7 <filter-name>shiroFilter</filter-name> 8 <url-pattern>/*</url-pattern> 9 </filter-mapping>
注意,此配置一定要在struts配置之前
3.配置shiro框架相关对象
在spring配置文件applicationContext.xml中注册shiroFilter在spring配置文件applicationContext.xml中注册shiroFilter
1 <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean"> 2 <!-- 注入shiro框架核心对象,安全管理器 --> 3 <property name="securityManager" ref="securityManager"/> 4 <!--private String loginUrl;登录页面 5 private String successUrl;登录成功后跳转页面 6 private String unauthorizedUrl;权限不足时的提示页面--> 7 <property name="loginUrl" value="/login.html"/> 8 <property name="successUrl" value="/index.html"/> 9 <property name="unauthorizedUrl" value="/unauthorized.html"/> 10 <!-- 指定URL拦截规则 --> 11 <property name="filterChainDefinitions"> 12 <!--authc:代表shiro框架提供的一个过滤器,这个过滤器用于判断当前用户是否已经完成认证, 13 如果当前用户已经认证,就放行,如果当前用户没有认证,跳转到登录页面 14 anon:代表shiro框架提供的一个过滤器,允许匿名访问--> 15 <value> 16 /css/* = anon 17 /images/* = anon 18 /js/** = anon 19 /validatecode.jsp* = anon 20 /userAction_login.action = anon 21 /** = authc 22 </value> 23 </property> 24 </bean>
注册安全管理器对象
1 <!-- 注册安全管理器 --> 2 <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager"> 3 <property name="realm" ref="bosRealm"></property> 4 </bean>
4.登录功能的action
@ParentPackage("struts-default") @Namespace("/") @Scope("prototype") @Controller public class UserAction extends CommonAction<User> { //属性注入ckeckcode private String checkcode; public void setCheckcode(String checkcode) { this.checkcode = checkcode; } //用户登录功能 @Action(value="userAction_login",results={@Result(name="home",location="/index.html",type="redirect"), @Result(name="login",location="/login.html",type="redirect")}) public String login(){ //从Session中获得验证码 String validatecode = (String) ServletActionContext.getRequest().getSession().getAttribute("key"); if(StringUtils.isNotBlank(checkcode) && StringUtils.isNotBlank(validatecode) && validatecode.equals(checkcode)){ //验证码验证通过 //获得当前用户 Subject subject = SecurityUtils.getSubject(); //获得用户名密码令牌 AuthenticationToken token = new UsernamePasswordToken(getModel().getUsername(),getModel().getPassword()); try { subject.login(token); User user = (User) subject.getPrincipal(); ServletActionContext.getRequest().getSession().setAttribute("loginUser", user); return "home"; } catch (AuthenticationException e) { e.printStackTrace(); } }else{ //验证码输入错误 return LOGIN; } return LOGIN; } }
5.自定义realm
1 public class BosRealm extends AuthorizingRealm{ 2 3 @Override 4 protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection arg0) { 5 // TODO Auto-generated method stub 6 return null; 7 } 8 9 @Autowired 10 private UserDao userDao; 11 /** 12 * 认证方法 13 */ 14 protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException { 15 UsernamePasswordToken passwordToken = (UsernamePasswordToken) token; 16 String username = passwordToken.getUsername(); 17 //查询数据库 18 User user = userDao.findByUsername(username); 19 if(user == null){ 20 return null ; 21 } 22 AuthenticationInfo info = new SimpleAuthenticationInfo(user, user.getPassword(), this.getName()); 23 return info; 24 } 25 }
注册自定义realm
<bean id="bosRealm" class="com.itheima.bos.service.realm.BosRealm"></bean>
以上是关于shiro框架--权限管理的主要内容,如果未能解决你的问题,请参考以下文章
权限管理框架Shiro renren-security权限管理结构