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框架--权限管理的主要内容,如果未能解决你的问题,请参考以下文章

spring boot 2 + shiro 实现权限管理

Apache shiro权限基本使用

权限管理框架Shiro renren-security权限管理结构

权限管理框架Shiro renren-security权限管理结构

shiro框架--权限管理

Shiro权限管理框架详解