第一步:引入依赖
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-spring</artifactId>
<version>1.4.0</version>
</dependency>
第二步:自定义realm
自定义realm实现了一个接口,覆盖两个方法,一个做认证,一个做授权。
public class UserRealm extends AuthorizingRealm {
/**
* 认证
* @param authenticationToken
* @return
* @throws AuthenticationException
*/
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
System.out.println("执行了认证");
return null;
}
/**
* 授权
* @param principalCollection
* @return
*/
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
System.out.println("指定了授权");
return null;
}
}
第三步:编写shiroconfig配置类
配置类中主要配置三个东西:过滤器、安全管理器、自定义的realm;其中对地址的拦截就在过滤器中进行配置
过滤的级别
- * shiro内置过滤器
- * anon:无需认证(登录)就可以访问
- * authc:必须认证才可以访问
- * user:如哦使用了rememberMe的功能可以直接访问
- * perms:该资源必须得到资源权限才可以访问
- * role:该资源必须得到相应的角色权限才可以访问
这里我实现了几个请求地址的拦截
@Configuration
public class ShiroConfig {
/**
* 创建shiroFilterFactoryBean
*/
@Bean
public ShiroFilterFactoryBean getShiroFilterFactoryBean(@Qualifier("defaultWebSecurityManager") DefaultWebSecurityManager defaultWebSecurityManager){
ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
//设置安全管理器
shiroFilterFactoryBean.setSecurityManager(defaultWebSecurityManager);
LinkedHashMap<String, String> filterMap = new LinkedHashMap<>();
filterMap.put("/add","authc");
filterMap.put("/update","authc");
//使用通配的方式设置某一个目录的访问级别
/* filterMap.put("/templates","authc");*/
//修改访问被拦截过后的跳转页面
shiroFilterFactoryBean.setLoginUrl("/login");
shiroFilterFactoryBean.setFilterChainDefinitionMap(filterMap);
return shiroFilterFactoryBean;
}
/**
* 创建defaultWebSecurityManageer
*/
@Bean(value = "defaultWebSecurityManager")
public DefaultWebSecurityManager getDefaultWebSecurityManager(@Qualifier("userRealm") UserRealm userRealm){
DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
//关联我们创建的realm
securityManager.setRealm(userRealm);
return securityManager;
}
/**
* 创建realm
*/
@Bean(value = "userRealm")
public UserRealm getRealm(){
return new UserRealm();
}
}
第四步:前端代码
进入用户添加功能:<a href="/add">用户添加</a>
进入用户更新功能:<a href="/update">用户更新</a>
第五步:后端代码
这里是controller的代码,主要进行地址的跳转
@Controller
public class UserController {
@RequestMapping("/add")
public String myTranslate1(){
return "add";
}
@RequestMapping("/update")
public String myTranslate2(){
return "update";
}
@RequestMapping("/login")
public String myTranslate3(){
return "login";
}
}
总结:这样就实现使用shiro对基本地址的拦截