1、新建springboot项目、导入依赖(这里只导入shiro,其他web\mybatis\thymeleaf\jdbc自行导入)
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-spring</artifactId>
<version>1.4.2</version>
</dependency>
2、配置shiro 配置类 如下的3个bean层层调用 相互关联
@Configuration
public class ShiroConfig {
//shirofilterfactorybean
@Bean
public ShiroFilterFactoryBean getShiroFilterFactoryBean(@Qualifier("securityManager") DefaultWebSecurityManager defaultWebSecurityManager) {
ShiroFilterFactoryBean bean = new ShiroFilterFactoryBean();
//设置安全管理器
bean.setSecurityManager(defaultWebSecurityManager);
/**
* anon 无需认证可以访问
* authc 必须认证才能访问
* user 必须拥有 记住我 才能用
* perms 某个资源的权限才能访问
* role 拥有某个校色权限才能访问
* */
System.out.println("进入shiro");
//拦截
Map<String, String> filterChainMap = new LinkedHashMap<>();
/***
* 想要访问 /user/add 必须认证 没有认证则跳转到 自己设置的 /toLogin
* bean.setLoginUrl("/toLogin");
*/
filterChainMap.put("/user/add", "authc");
filterChainMap.put("/user/update", "authc");
/**
* 授权 未授权的情况下 会跳转到未授权页面
* 未授权对应的请求在 下面 bean.setUnauthorizedUrl("/unauth");
* 有点resultful风格的味道
* */
filterChainMap.put("/user/add", "perms[user:add]");
bean.setFilterChainDefinitionMap(filterChainMap);
//设置登录请求 认证请求
bean.setLoginUrl("/toLogin");
//未授权页面
bean.setUnauthorizedUrl("/unauth");
return bean;
}
//defaultwebsecuritymanager
@Bean("securityManager")
public DefaultWebSecurityManager getDefaultWebSecurityManager(@Qualifier("userRealm") UserRealm userRealm) {
DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
//关联UserRealm
securityManager.setRealm(userRealm);
return securityManager;
}
//创建realm 对象 自定义
@Bean
public UserRealm userRealm() {
return new UserRealm();
}
}
3、配置UserRealm
UserRealm.java
:
//认证
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
System.out.println("进入认证");
String username="root";
String password="root";
UsernamePasswordToken usertoken = (UsernamePasswordToken) authenticationToken;
if (!usertoken.getUsername().equals(username)){
return null;//自动抛出 UnknownAccountException
}
/***
* user.getPwd() 用户密码 密码认证 shiro自己做
* user 为当前用户
*/
return new SimpleAuthenticationInfo("",user.getPwd(),"");
}
4、如上,只有前端账户密码为root root才可认证完成