资讯专栏INFORMATION COLUMN

spring-springmvc-mybatis-shiro项目介绍

fanux / 2036人阅读

摘要:项目介绍在之前的整合项目之后,新增日志简单集成,之前的代码不予展示与介绍,想了解的请参考整合项目项目代码获取项目结构代码控制层,,主要包含登录及几个页面跳转会跳到我们自定义的中登录用户名或密码错误业务处理层,包含一个包,以接口类型存在

spring-springmvc-mybatis-shiro项目介绍

在之前的mybatis整合项目之后,新增日志、简单集成shiro,之前的代码不予展示与介绍,想了解的请参考mybatis整合项目
项目代码获取:https://github.com/pysasuke/s...

项目结构 java:代码

controller:控制层,ShiroUserController,主要包含登录及几个页面跳转

</>复制代码

  1. @RequestMapping("/login")
  2. public String login(ShiroUser shiroUser, HttpServletRequest request) {
  3. Subject subject = SecurityUtils.getSubject();
  4. UsernamePasswordToken token = new UsernamePasswordToken(shiroUser.getUsername(), shiroUser.getPassword());
  5. try {
  6. subject.login(token);//会跳到我们自定义的realm中
  7. request.getSession().setAttribute("user", shiroUser);
  8. log.info(shiroUser.getUsername() + "登录");
  9. return "success";
  10. } catch (UnknownAccountException e) {
  11. request.getSession().setAttribute("user", shiroUser);
  12. return "login";
  13. } catch (IncorrectCredentialsException e) {
  14. request.getSession().setAttribute("user", shiroUser);
  15. request.setAttribute("error", "用户名或密码错误!");
  16. return "login";
  17. }
  18. }

service:业务处理层,包含一个impl包,Service以接口类型存在,impl包下存放Service接口的实现类,ShiroUserServiceImpl包含用户、角色、权限相关操作

</>复制代码

  1. @Service("shiroUserService")
  2. public class ShiroUserServiceImpl implements ShiroUserService {
  3. @Resource
  4. private ShiroUserMapper shiroUserMapper;
  5. public ShiroUser getByUsername(String username) {
  6. return shiroUserMapper.getByUsername(username);
  7. }
  8. public Set getRoles(String username) {
  9. return shiroUserMapper.getRoles(username);
  10. }
  11. public Set getPermissions(String username) {
  12. return shiroUserMapper.getPermissions(username);
  13. }
  14. }

dao:数据库交互层

model:实体对象层

realm: 自定义Realm(shiro相关)

</>复制代码

  1. public class MyRealm extends AuthorizingRealm {
  2. @Resource
  3. private ShiroUserService shiroUserService;
  4. // 为当前登陆成功的用户授予权限和角色,已经登陆成功了
  5. @Override
  6. protected AuthorizationInfo doGetAuthorizationInfo(
  7. PrincipalCollection principals) {
  8. String username = (String) principals.getPrimaryPrincipal(); //获取用户名
  9. SimpleAuthorizationInfo authorizationInfo = new SimpleAuthorizationInfo();
  10. authorizationInfo.setRoles(shiroUserService.getRoles(username));
  11. authorizationInfo.setStringPermissions(shiroUserService.getPermissions(username));
  12. return authorizationInfo;
  13. }
  14. // 验证当前登录的用户,获取认证信息
  15. @Override
  16. protected AuthenticationInfo doGetAuthenticationInfo(
  17. AuthenticationToken token) throws AuthenticationException {
  18. String username = (String) token.getPrincipal(); // 获取用户名
  19. ShiroUser shiroUser = shiroUserService.getByUsername(username);
  20. if (shiroUser != null) {
  21. AuthenticationInfo authcInfo = new SimpleAuthenticationInfo(shiroUser.getUsername(), shiroUser.getPassword(), "myRealm");
  22. return authcInfo;
  23. } else {
  24. return null;
  25. }
  26. }
  27. }
resources:配置文件

application.xml:spring配置文件入口,加载spring-config.xml

spring-mvc.xml:springmvc配置相关文件

spring-config.xml:加载其他集成的配置文件,这里加载spring-mybatis.xml、spring-shiro.xml和db.properties

spring-mybatis.xml:mybatis相关配置文件

spring-shiro.xml:shiro配置相关文件

</>复制代码

  1. /shiro/user/logout = logout
  2. /shiro/user/login=anon
  3. /shiro/user/person*=authc
  4. /shiro/user/student*/**=roles[student]
  5. /shiro/user/teacher*/**=perms["user:create"]

db.properties:数据库相关参数

log4j.properties:日志相关配置

</>复制代码

  1. ###Log4j建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG
  2. log4j.rootLogger=info, console, log, error
  3. ###Console ###
  4. #输出到控制台
  5. log4j.appender.console = org.apache.log4j.ConsoleAppender
  6. log4j.appender.console.Target = System.out
  7. log4j.appender.console.layout = org.apache.log4j.PatternLayout
  8. log4j.appender.console.layout.ConversionPattern = %d %p[%C:%L]- %m%n
  9. ### log ###
  10. #输出到文件
  11. log4j.appender.log = org.apache.log4j.DailyRollingFileAppender
  12. #日志编码设置
  13. log4j.appender.log.Encoding=UTF-8
  14. #文件路径(绝对路径)
  15. log4j.appender.log.File = E:/my_project/spring-springmvc-mybatis/logs/log.log
  16. #true为追加,false为覆盖,默认为true
  17. log4j.appender.log.Append = true
  18. #针对DEBUG级别以上的日志,低于DEBUG级别的日志不显示,这里设置为DEBUG没有意义
  19. log4j.appender.log.Threshold = DEBUG
  20. log4j.appender.log.DatePattern="."yyyy-MM-dd
  21. #指定布局模式
  22. log4j.appender.log.layout = org.apache.log4j.PatternLayout
  23. log4j.appender.log.layout.ConversionPattern = %d %p[%c:%L] - %m%n
  24. ### Error ###
  25. log4j.appender.error = org.apache.log4j.DailyRollingFileAppender
  26. log4j.appender.error.File = E:/my_project/spring-springmvc-mybatis/logs/error.log
  27. log4j.appender.error.Append = true
  28. log4j.appender.error.Threshold = ERROR
  29. log4j.appender.error.DatePattern="."yyyy-MM-dd
  30. log4j.appender.error.layout = org.apache.log4j.PatternLayout
  31. log4j.appender.error.layout.ConversionPattern =%d %p[%c:%L] - %m%n
  32. ###控制台打印sql配置
  33. log4j.logger.com.ibatis=DEBUG
  34. log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG
  35. log4j.logger.com.ibatis.common.jdbc.ScriptRunner=DEBUG
  36. log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUG
  37. log4j.logger.java.sql.Connection=DEBUG
  38. log4j.logger.java.sql.Statement=DEBUG
  39. log4j.logger.java.sql.PreparedStatement=DEBUG

mapping:存放mybatis映射文件,以UserMapper.xml为例

</>复制代码

webapp:web相关

web.xml

</>复制代码

  1. shiroFilter
  2. org.springframework.web.filter.DelegatingFilterProxy
  3. targetFilterLifecycle
  4. true
  5. shiroFilter
  6. /*
 其他文件 logs:日志存放

error.log:记录error级别日志

log.log:记录其他日志

deploy:部署文件,sql

update.sql

</>复制代码

  1. SET FOREIGN_KEY_CHECKS=0;
  2. -- ----------------------------
  3. -- Table structure for `t_permission`
  4. -- ----------------------------
  5. DROP TABLE IF EXISTS `t_permission`;
  6. CREATE TABLE `t_permission` (
  7. `id` int(11) NOT NULL,
  8. `role_id` int(11) NOT NULL,
  9. `permissionname` varchar(100) COLLATE utf8mb4_bin NOT NULL,
  10. PRIMARY KEY (`id`)
  11. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
  12. -- ----------------------------
  13. -- Records of t_permission
  14. -- ----------------------------
  15. INSERT INTO `t_permission` VALUES ("1", "1", "user:create");
  16. INSERT INTO `t_permission` VALUES ("2", "2", "user:update");
  17. -- ----------------------------
  18. -- Table structure for `t_role`
  19. -- ----------------------------
  20. DROP TABLE IF EXISTS `t_role`;
  21. CREATE TABLE `t_role` (
  22. `id` int(11) NOT NULL AUTO_INCREMENT,
  23. `rolename` varchar(20) COLLATE utf8mb4_bin NOT NULL,
  24. PRIMARY KEY (`id`)
  25. ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
  26. -- ----------------------------
  27. -- Records of t_role
  28. -- ----------------------------
  29. INSERT INTO `t_role` VALUES ("1", "teacher");
  30. INSERT INTO `t_role` VALUES ("2", "student");
  31. -- ----------------------------
  32. -- Table structure for `t_user`
  33. -- ----------------------------
  34. DROP TABLE IF EXISTS `t_user`;
  35. CREATE TABLE `t_user` (
  36. `id` int(11) NOT NULL AUTO_INCREMENT,
  37. `username` varchar(20) COLLATE utf8mb4_bin NOT NULL,
  38. `password` varchar(20) COLLATE utf8mb4_bin NOT NULL,
  39. `role_id` int(11) NOT NULL,
  40. PRIMARY KEY (`id`)
  41. ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
  42. -- ----------------------------
  43. -- Records of t_user
  44. -- ----------------------------
  45. INSERT INTO `t_user` VALUES ("1", "admin", "admin", "1");
  46. INSERT INTO `t_user` VALUES ("2", "test", "123456", "2");
  47. -- ----------------------------
  48. -- Table structure for `user`
  49. -- ----------------------------
  50. DROP TABLE IF EXISTS `user`;
  51. CREATE TABLE `user` (
  52. `id` bigint(20) NOT NULL AUTO_INCREMENT,
  53. `username` varchar(32) COLLATE utf8mb4_bin NOT NULL,
  54. `password` varchar(32) COLLATE utf8mb4_bin NOT NULL,
  55. `email` varchar(32) COLLATE utf8mb4_bin NOT NULL,
  56. PRIMARY KEY (`id`)
  57. ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
  58. -- ----------------------------
  59. -- Records of user
  60. -- ----------------------------
  61. INSERT INTO `user` VALUES ("1", "张三", "123456", "835852265@qq.com");
pom.xml:maven相关

</>复制代码

  1. log4j
  2. log4j
  3. ${log4j.version}
  4. org.slf4j
  5. slf4j-api
  6. ${slf4j.version}
  7. org.slf4j
  8. slf4j-log4j12
  9. ${slf4j.version}
  10. org.apache.shiro
  11. shiro-all
  12. ${shiro-version}
  13. org.projectlombok
  14. lombok
  15. 1.16.8

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/70331.html

相关文章

  • 一个JAVA渣渣的校招成长记,附BAT美团网易等20家面经总结

    摘要:作者重庆森林链接来源牛客网整个三月份通过牛客网和网友分享的经验学到了很多东西,现在反馈一下我的面试经历,希望对同学们有帮助。个人情况大三本方向渣硕,经过实验室学长内推,于三月底完成面试。校招是实力和运气的结合,缺一不可。 欢迎关注我的微信公众号:Java面试通关手册(坚持原创,分享美文,分享各种Java学习资源,面试题,以及企业级Java实战项目回复关键字免费领取):showImg(h...

    mozillazg 评论0 收藏0
  • 程序员面试时这样介绍自己的项目经验,成功率能达到98.99%

    面试时7份靠能力,3份靠技能,而刚开始时的介绍项目又是技能中的重中之重,决定一次面试的成败,那么面试时如果介绍自己的项目呢? 1、在面试前准备项目描述 别害怕,因为面试官什么都不知道,面试官是人,不是神,拿到你的简历的时候,是没法核实你的项目细节的。更何况,你做的项目是以月为单位算的,而面试官最多用30分钟来从你的简历上了解你的项目经验,所以你对项目的熟悉程度要远远超过面试官,所以你一点也不用紧张...

    ad6623 评论0 收藏0
  • 程序员面试时这样介绍自己的项目经验,成功率能达到98.99%

    面试时7份靠能力,3份靠技能,而刚开始时的介绍项目又是技能中的重中之重,决定一次面试的成败,那么面试时如果介绍自己的项目呢? 1、在面试前准备项目描述 别害怕,因为面试官什么都不知道,面试官是人,不是神,拿到你的简历的时候,是没法核实你的项目细节的。更何况,你做的项目是以月为单位算的,而面试官最多用30分钟来从你的简历上了解你的项目经验,所以你对项目的熟悉程度要远远超过面试官,所以你一点也不用紧张...

    shadowbook 评论0 收藏0
  • 一位大佬的亲身经历总结:简历和面试的技巧

    摘要:我觉得了解简历和面试的技巧可以帮助你更好的去学习重要的知识点以及更好地去准备面试以及面试,说实话,我个人觉得这些东西还挺重要的。在本文里,我将介绍我这段时间里更新简历和面试的相关经历。 分享一篇很不错的文章!本文作者曾经写过《Java Web轻量级开发面试教程》和 《Java核心技术及面试指南》这两本书。我觉得了解简历和面试的技巧可以帮助你更好的去学习重要的知识点以及更好地去准备面试以...

    pingan8787 评论0 收藏0

发表评论

0条评论

fanux

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<