Shiro_xx

  1. 所需依赖

    <!--thymeleaf——shiro整合包-->
    <dependency>
        <groupId>com.github.theborakompanioni</groupId>
        <artifactId>thymeleaf-extras-shiro</artifactId>
        <version>2.0.0</version>
    </dependency>
    shiro包
    <dependency>
        <groupId>org.apache.shiro</groupId>
        <artifactId>shiro-spring</artifactId>
        <version>1.5.3</version>
    </dependency>
    
  2. 创建UserRealm类继承AuthorizingRealm

public class UserRealm extends AuthorizingRealm {
    @Override  //授权
    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
        return null;
    }

    @Override   //认证
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
        System.out.println("认证请求");
        UsernamePasswordToken token = (UsernamePasswordToken) authenticationToken;
        if (!token.getUsername().equals("root")) {
            return null;
        }
        return new SimpleAuthenticationInfo("","1","");
//        //数据库登录
//        UsernamePasswordToken token = (UsernamePasswordToken) authenticationToken;
//        Users users = userMapper.queryByName(token.getUsername());
//        if (users==null){return null;}
//        return new SimpleAuthenticationInfo("", users.getPassword(), "");

    }
}
  1. 创建配置类ShiroConfig添加注释@Configuration
@Configuration
public class ShiroConfig {
    @Bean
    public  UserRealm getRealm(){
        return new UserRealm();
    }
    @Bean
    public DefaultWebSecurityManager getDefaultWebSecurityManager(@Qualifier("getRealm")UserRealm realm){
        DefaultWebSecurityManager defaultWebSecurityManager = new DefaultWebSecurityManager();
        defaultWebSecurityManager.setRealm(realm);
        return defaultWebSecurityManager;
    }
    @Bean
    public ShiroFilterFactoryBean getFactoryBean(@Qualifier("getDefaultWebSecurityManager")DefaultWebSecurityManager defaultWebSecurityManager){
        ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
        shiroFilterFactoryBean.setSecurityManager(defaultWebSecurityManager);

        Map map = new LinkedHashMap();
        map.put("/pages/*", "authc");
        shiroFilterFactoryBean.setFilterChainDefinitionMap(map);
        shiroFilterFactoryBean.setLoginUrl("/toLogin");
        return shiroFilterFactoryBean;
    }
        //创建shiro——thrmeleaf整合类
    @Bean
    public ShiroDialect getShiroDialect(){
        return new ShiroDialect();
    }
}
 /*
        anon:无认证即可访问
        authc:认证才能访问
        user:必须有 记住我功能 才能用
        perms:拥有对某个资源才能访问
        role:拥有角色才能访问
        * */
  1. 编写controller层
	@RequestMapping("/toLogin")
    public String toLogin(Model model) {
        return "/pages/samples/login";
    }
    @RequestMapping("/Login")
    public String logins(Model model,String username,String password) {
        Subject subject = SecurityUtils.getSubject();  //获得用户信息
        UsernamePasswordToken token = new UsernamePasswordToken(username,password);
        try {
            subject.login(token);
            return "index";
        } catch (UnknownAccountException e) {
            model.addAttribute("msg", "用户不存在");
            return "pages/samples/login";
        }   catch (IncorrectCredentialsException e){
            model.addAttribute("msg", "密码错误");
            return "pages/samples/login";
        }
    }
  1. 标签说明
guest标签
  <shiro:guest>
  </shiro:guest>
  用户没有身份验证时显示相应信息,即游客访问信息。

user标签
  <shiro:user>  
  </shiro:user>
  用户已经身份验证/记住我登录后显示相应的信息。

authenticated标签
  <shiro:authenticated>  
  </shiro:authenticated>
  用户已经身份验证通过,即Subject.login登录成功,不是记住我登录的。

notAuthenticated标签
  <shiro:notAuthenticated>
  
  </shiro:notAuthenticated>
  用户已经身份验证通过,即没有调用Subject.login进行登录,包括记住我自动登录的也属于未进行身份验证。

principal标签
  <shiro: principal/>
  
  <shiro:principal property="username"/>
  相当于((User)Subject.getPrincipals()).getUsername()。

lacksPermission标签
  <shiro:lacksPermission name="org:create">
 
  </shiro:lacksPermission>
  如果当前Subject没有权限将显示body体内容。

hasRole标签
  <shiro:hasRole name="admin">  
  </shiro:hasRole>
  如果当前Subject有角色将显示body体内容。

hasAnyRoles标签
  <shiro:hasAnyRoles name="admin,user">
   
  </shiro:hasAnyRoles>
  如果当前Subject有任意一个角色(或的关系)将显示body体内容。

lacksRole标签
  <shiro:lacksRole name="abc">  
  </shiro:lacksRole>
  如果当前Subject没有角色将显示body体内容。

hasPermission标签
  <shiro:hasPermission name="user:create">  
  </shiro:hasPermission>
  如果当前Subject有权限将显示body体内容

  1. thymeleaf——shiro整合命名空间

xmlns:shiro=“http://www.pollix.at/thymeleaf/shiro”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值