刚开始学习shiro, 实现的效果非常简单,首页点击添加(/user/add),应该能直接访问. 而点击更新(/user/update),应该提示登录.但是实际都可以直接点开,不知道哪里出问题了,shiro的配置没生效,请高手赐教,谢谢
环境:java 17 springboot 3.1.1 shiro 1.11.0
pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-spring-boot-starter</artifactId>
<version>1.11.0</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
controller/MyController.java
@Controller
public class MyController {
@RequestMapping("/")
public String index() {
return "index";
}
@GetMapping("/user/add")
public String add(Model model) {
return "user/add";
}
@GetMapping("/user/update")
public String update(Model model) {
return "user/update";
}
}
resources/templates/index.html
<html>
<body>
<h1>首页</h1>
<a href="user/add">添加</a>
<a href="user/update">更新</a>
</body>
</html>
config/UserRealm.java
public class UserRealm extends AuthorizingRealm {
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
return null;
}
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
return null;
}
}
config/ShiroConfiguration.java
@Configuration
public class ShiroConfiguration {
// 1. 配置shiroFilterFactoryBean
@Bean(name = "shiroFilterFactoryBean")
public ShiroFilterFactoryBean shiroFilterFactoryBean(DefaultWebSecurityManager defaultWebSecurityManager) {
ShiroFilterFactoryBean bean = new ShiroFilterFactoryBean();
// 设置安全管理器
bean.setSecurityManager(defaultWebSecurityManager);
bean.setLoginUrl("/login");
bean.setUnauthorizedUrl("/unauthorized");
// 添加shiro的内置过滤器
Map<String, String> filterMap = new LinkedHashMap<>();
filterMap.put("/user/add","anon");
filterMap.put("/user/update","authc");
bean.setFilterChainDefinitionMap(filterMap);
return bean;
}
// 2. 配置DefaultWebSecurityManager
@Bean(name = "defaultWebSecurityManager")
public DefaultWebSecurityManager defaultWebSecurityManager() {
DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
securityManager.setRealm(userRealm());
return securityManager;
}
// 3. 配置Realm
@Bean(name = "userRealm")
public UserRealm userRealm() {
return new UserRealm();
}
}
shiro-spring-boot-web-starter
注意坐标