SpringBoot 2.0 을 사용 하여 기업 급 응용 개발 프레임 워 크 구축(7)통합 Shiro
6974 단어 SpringBoot
//
CREATE TABLE `sys_user` (
`id` varchar(32) NOT NULL COMMENT 'id',
`username` varchar(64) DEFAULT NULL COMMENT ' ',
`password` varchar(64) DEFAULT NULL COMMENT ' ',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT=' ';
INSERT INTO `demo`.`sys_user` (`id`, `username`, `password`) VALUES ('1', 'admin', '123456');
//
CREATE TABLE `sys_role` (
`id` varchar(32) NOT NULL COMMENT 'id',
`role_name` varchar(32) DEFAULT NULL COMMENT ' ',
`role_desc` varchar(32) DEFAULT NULL COMMENT ' ',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT=' ';
INSERT INTO `demo`.`sys_role` (`id`, `role_name`, `role_desc`) VALUES ('1', 'ROLE_ADMIN', ' ');
// -
CREATE TABLE `sys_user_role` (
`id` varchar(32) NOT NULL COMMENT 'id',
`user_id` varchar(32) DEFAULT NULL COMMENT ' id',
`role_id` varchar(32) DEFAULT NULL COMMENT ' id',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT=' ';
INSERT INTO `demo`.`sys_user_role` (`id`, `user_id`, `role_id`) VALUES ('1', '1', '1');
그리고 앞서 말 한 generator 로 실 체 를 만 듭 니 다.
org.apache.shiro
shiro-spring-boot-web-starter
1.4.0
그리고 사용자 정의 Realm 만 들 기
public class MyRealm extends AuthorizingRealm {
@Autowired
private SysUserMapper sysUserMapper;
//
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken)
throws AuthenticationException {
//
String username = (String) authenticationToken.getPrincipal();
//
SysUser user = sysUserMapper.findByUserName(username);
if (user == null) {
log.info(" {} ",username);
throw new UnknownAccountException(" ");
}
SimpleAuthenticationInfo info = new SimpleAuthenticationInfo(user.getUsername(), user.getPassword(),getName());
return info;
}
//
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
//
String username = (String) SecurityUtils.getSubject().getPrincipal();
//
SysUser user = sysUserMapper.findByUserName(username);
//
List roleList = user.getRoles();
SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
log.debug(" {} :");
for (SysRole role : roleList) {
//
info.addStringPermission(role.getRoleName());
}
return info;
}
}
config 클래스 만 들 기
@Configuration
public class ShiroConfiguration {
@Bean
public MyRealm realm(){
return new MyRealm();
}
// shiro-spring-boot-starter 1.4 , SecurityManager , shiro-spring
@Bean
public DefaultWebSecurityManager securityManager(MyRealm realm){
DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
securityManager.setRealm(realm);
return securityManager;
}
@Bean
public LifecycleBeanPostProcessor lifecycleBeanPostProcessor() {
return new LifecycleBeanPostProcessor();
}
@Bean
public ShiroFilterFactoryBean shirFilter(SecurityManager securityManager){
ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
// SecurityManager
shiroFilterFactoryBean.setSecurityManager(securityManager);
// Web "/login.jsp"
shiroFilterFactoryBean.setLoginUrl("/login");
//
shiroFilterFactoryBean.setSuccessUrl("/index");
// ;
shiroFilterFactoryBean.setUnauthorizedUrl("/403");
// .
Map filterChainDefinitionMap = new LinkedHashMap();
// , Shiro
filterChainDefinitionMap.put("/logout", "logout");
// , , /** : , ;
// authc: url ; anon: url
filterChainDefinitionMap.put("/login", "anon");
filterChainDefinitionMap.put("/login.html", "anon");
filterChainDefinitionMap.put("/**", "authc");
shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);
return shiroFilterFactoryBean;
}
}
로그 인 테스트 생 성
@Controller
public class ShiroController {
@GetMapping("/login")
public String login(){
return "redirect:login.html";
}
@PostMapping("/login")
public String login(String username, String password){
Subject user = SecurityUtils.getSubject();
UsernamePasswordToken token = new UsernamePasswordToken(username, password);
String returnUrl = "redirect:index.html";
String a = "1";
try {
//shiro , , UserRealm
user.login(token);
} catch (UnknownAccountException e) {
//
returnUrl = "redirect:login.html?error=0";
// ,
} catch (DisabledAccountException e) {
//
returnUrl = "redirect:login.html?error=1";
} catch (IncorrectCredentialsException e) {
//
returnUrl = "redirect:login.html?error=2";
} catch (Throwable e) {
//
returnUrl = "redirect:login.html?error=3";
} finally {
return returnUrl;
}
}
}
login.html
Title1
집적 중인 구덩이
1.config 클래스 의 security Manager()반환 형식
jar 가 spring-shiro 를 사용 하면 Security Manager 로 돌아 가면 됩 니 다.shiro-spring-boot-starter 1.4 를 사용 하면 Default WebSecurity Manager 로 돌아 가 야 합 니 다.그렇지 않 으 면 오류 가 발생 합 니 다.
2.다 중 환경 설정
다 중 환경 설정 에 서 는 resources 디 렉 터 리 에 불 러 온 파일 을 수 동 으로 정의 해 야 하기 때문에 html 를 넣 는 것 을 잊 지 마 세 요.
3.페이지 전환 문제
return"xx.html"방식 을 사용 하면 로그 인 할 때 제출 폼 이 post 이 고 xx.html 에 접근 하 는 것 이 get 방법 이기 때문에 오류 가 발생 할 수 있 습 니 다.redirect 또는 forward 를 사용 해 야 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
【Java・SpringBoot・Thymeleaf】 에러 메세지를 구현(SpringBoot 어플리케이션 실천편 3)로그인하여 사용자 목록을 표시하는 응용 프로그램을 만들고, Spring에서의 개발에 대해 공부하겠습니다 🌟 마지막 데이터 바인딩에 계속 바인딩 실패 시 오류 메시지를 구현합니다. 마지막 기사🌟 src/main/res...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.