자바 백 엔 드 피 갱-Spring Boot 통합 Shiro
4028 단어 자바
전통 적 인 SSM+Shiro 의 설정 을 자바 로 구현 합 니 다4.567917.Shiro 가 공식 적 으로 제공 하 는 자동화 설정 을 사용 하여 본 고 에서 실 용적 인 두 번 째 방식 으로 통합 시 켰 으 나 Postman 을 사용 하여 테스트 할 때 다음 과 같은 오류 가 발생 했다
org.apache.shiro.UnavailableSecurityManagerException:
No SecurityManager accessible to the calling code,
either bound to the org.apache.shiro.util.ThreadContext or as a vm static singleton.
This is an invalid application configuration.
4.567917.Postman 오 류 는 다음 과 같이 인터넷 에서 각종 튜 토리 얼 을 찾 아 해결 방법 을 찾 았 습 니 다.대부분 필터 의 문제 라 고 합 니 다.웹.xml 에 Delegating FilterProxy 를 추가 해 야 합 니 다.그러나 본 논문 의 통합 은 Spring Boot 환경 에서 테스트 한 것 으로 웹.xml 파일 을 사용 하지 않 았 습 니 다.웹.xml 파일 을 더 하면 전체 공정 이 이도 저도 아 닙 니 다.그래서 이런 해법 을 과 감히 버 렸 다.그럼 어떻게 해결 해 야 되 지?나중에 동료 에 게 가르침 을 청 한 후에 야 Shiro 가 공식 적 으로 제공 하 는 자동화 설정 을 사용 하려 면 다음 과 같은 의존 도 를 사용 해 야 한 다 는 것 을 알 게 되 었 다
org.apache.shiro
shiro-spring-boot-web-starter
1.4.0
자바 로 SSM+Shiro 설정 에 의존 하 는 것 이 아 닙 니 다.
org.apache.shiro
shiro-web
1.4.0
org.apache.shiro
shiro-spring
1.4.0
정확 한 코드 예 시 는 다음 과 같다.
org.springframework.boot
spring-boot-starter-web
org.apache.shiro
shiro-spring-boot-web-starter
1.4.0
사용자 정의 MyRealm
public class MyRealm extends AuthorizingRealm {
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
return null;
}
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
String username = ((UsernamePasswordToken) token).getUsername();
if (!"zhangsan".equals(username)) {
throw new UnknownAccountException(" ");
}
return new SimpleAuthenticationInfo(username, "123", getName());
}
}
ShiroConfig 를 만 듭 니 다
@Configuration
public class ShiroConfig {
@Bean
MyRealm myRealm() {
return new MyRealm();
}
@Bean
DefaultWebSecurityManager securityManager() {
DefaultWebSecurityManager manager = new DefaultWebSecurityManager();
manager.setRealm(myRealm());
return manager;
}
@Bean
ShiroFilterChainDefinition shiroFilterChainDefinition() {
DefaultShiroFilterChainDefinition definition = new DefaultShiroFilterChainDefinition();
definition.addPathDefinition("/doLogin", "anon");
definition.addPathDefinition("/**", "authc");
return definition;
}
}
@Controller
public class ShiroController {
@PostMapping("/doLogin")
public String doLogin(String username, String password) {
try {
Subject subject = SecurityUtils.getSubject();
subject.login(new UsernamePasswordToken(username, password));
return "redirect:/index";//
} catch (AuthenticationException e) {
e.printStackTrace();
}
return "redirect:/login";//
}
@GetMapping("/index")
@ResponseBody
public String index() {
return "index";
}
@GetMapping("/login")
@ResponseBody
public String login() {
return "login";
}
}
테스트 결 과 는 다음 과 같다.
티끌 모 아 태산,물방울 이 돌 을 뚫 는 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.