摘要:項目介紹在之前的整合項目之后,新增日志簡單集成,之前的代碼不予展示與介紹,想了解的請參考整合項目項目代碼獲取項目結(jié)構(gòu)代碼控制層,,主要包含登錄及幾個頁面跳轉(zhuǎn)會跳到我們自定義的中登錄用戶名或密碼錯誤業(yè)務處理層,包含一個包,以接口類型存在
spring-springmvc-mybatis-shiro項目介紹
在之前的mybatis整合項目之后,新增日志、簡單集成shiro,之前的代碼不予展示與介紹,想了解的請參考mybatis整合項目
項目代碼獲取:https://github.com/pysasuke/s...
controller:控制層,ShiroUserController,主要包含登錄及幾個頁面跳轉(zhuǎn)
@RequestMapping("/login") public String login(ShiroUser shiroUser, HttpServletRequest request) { Subject subject = SecurityUtils.getSubject(); UsernamePasswordToken token = new UsernamePasswordToken(shiroUser.getUsername(), shiroUser.getPassword()); try { subject.login(token);//會跳到我們自定義的realm中 request.getSession().setAttribute("user", shiroUser); log.info(shiroUser.getUsername() + "登錄"); return "success"; } catch (UnknownAccountException e) { request.getSession().setAttribute("user", shiroUser); return "login"; } catch (IncorrectCredentialsException e) { request.getSession().setAttribute("user", shiroUser); request.setAttribute("error", "用戶名或密碼錯誤!"); return "login"; } }
service:業(yè)務處理層,包含一個impl包,Service以接口類型存在,impl包下存放Service接口的實現(xiàn)類,ShiroUserServiceImpl包含用戶、角色、權(quán)限相關(guān)操作
@Service("shiroUserService") public class ShiroUserServiceImpl implements ShiroUserService { @Resource private ShiroUserMapper shiroUserMapper; public ShiroUser getByUsername(String username) { return shiroUserMapper.getByUsername(username); } public SetgetRoles(String username) { return shiroUserMapper.getRoles(username); } public Set getPermissions(String username) { return shiroUserMapper.getPermissions(username); } }
dao:數(shù)據(jù)庫交互層
model:實體對象層
realm: 自定義Realm(shiro相關(guān))
public class MyRealm extends AuthorizingRealm { @Resource private ShiroUserService shiroUserService; // 為當前登陸成功的用戶授予權(quán)限和角色,已經(jīng)登陸成功了 @Override protected AuthorizationInfo doGetAuthorizationInfo( PrincipalCollection principals) { String username = (String) principals.getPrimaryPrincipal(); //獲取用戶名 SimpleAuthorizationInfo authorizationInfo = new SimpleAuthorizationInfo(); authorizationInfo.setRoles(shiroUserService.getRoles(username)); authorizationInfo.setStringPermissions(shiroUserService.getPermissions(username)); return authorizationInfo; } // 驗證當前登錄的用戶,獲取認證信息 @Override protected AuthenticationInfo doGetAuthenticationInfo( AuthenticationToken token) throws AuthenticationException { String username = (String) token.getPrincipal(); // 獲取用戶名 ShiroUser shiroUser = shiroUserService.getByUsername(username); if (shiroUser != null) { AuthenticationInfo authcInfo = new SimpleAuthenticationInfo(shiroUser.getUsername(), shiroUser.getPassword(), "myRealm"); return authcInfo; } else { return null; } } }resources:配置文件
application.xml:spring配置文件入口,加載spring-config.xml
spring-mvc.xml:springmvc配置相關(guān)文件
spring-config.xml:加載其他集成的配置文件,這里加載spring-mybatis.xml、spring-shiro.xml和db.properties
spring-mybatis.xml:mybatis相關(guān)配置文件
spring-shiro.xml:shiro配置相關(guān)文件
/shiro/user/logout = logout /shiro/user/login=anon /shiro/user/person*=authc /shiro/user/student*/**=roles[student] /shiro/user/teacher*/**=perms["user:create"]
db.properties:數(shù)據(jù)庫相關(guān)參數(shù)
log4j.properties:日志相關(guān)配置
###Log4j建議只使用四個級別,優(yōu)先級從高到低分別是ERROR、WARN、INFO、DEBUG log4j.rootLogger=info, console, log, error ###Console ### #輸出到控制臺 log4j.appender.console = org.apache.log4j.ConsoleAppender log4j.appender.console.Target = System.out log4j.appender.console.layout = org.apache.log4j.PatternLayout log4j.appender.console.layout.ConversionPattern = %d %p[%C:%L]- %m%n ### log ### #輸出到文件 log4j.appender.log = org.apache.log4j.DailyRollingFileAppender #日志編碼設(shè)置 log4j.appender.log.Encoding=UTF-8 #文件路徑(絕對路徑) log4j.appender.log.File = E:/my_project/spring-springmvc-mybatis/logs/log.log #true為追加,false為覆蓋,默認為true log4j.appender.log.Append = true #針對DEBUG級別以上的日志,低于DEBUG級別的日志不顯示,這里設(shè)置為DEBUG沒有意義 log4j.appender.log.Threshold = DEBUG log4j.appender.log.DatePattern="."yyyy-MM-dd #指定布局模式 log4j.appender.log.layout = org.apache.log4j.PatternLayout log4j.appender.log.layout.ConversionPattern = %d %p[%c:%L] - %m%n ### Error ### log4j.appender.error = org.apache.log4j.DailyRollingFileAppender log4j.appender.error.File = E:/my_project/spring-springmvc-mybatis/logs/error.log log4j.appender.error.Append = true log4j.appender.error.Threshold = ERROR log4j.appender.error.DatePattern="."yyyy-MM-dd log4j.appender.error.layout = org.apache.log4j.PatternLayout log4j.appender.error.layout.ConversionPattern =%d %p[%c:%L] - %m%n ###控制臺打印sql配置 log4j.logger.com.ibatis=DEBUG log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG log4j.logger.com.ibatis.common.jdbc.ScriptRunner=DEBUG log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUG log4j.logger.java.sql.Connection=DEBUG log4j.logger.java.sql.Statement=DEBUG log4j.logger.java.sql.PreparedStatement=DEBUG
mapping:存放mybatis映射文件,以UserMapper.xml為例
webapp:web相關(guān)
web.xml
其他文件 logs:日志存放shiroFilter org.springframework.web.filter.DelegatingFilterProxy targetFilterLifecycle true shiroFilter /*
error.log:記錄error級別日志
log.log:記錄其他日志
deploy:部署文件,sqlupdate.sql
SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for `t_permission` -- ---------------------------- DROP TABLE IF EXISTS `t_permission`; CREATE TABLE `t_permission` ( `id` int(11) NOT NULL, `role_id` int(11) NOT NULL, `permissionname` varchar(100) COLLATE utf8mb4_bin NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; -- ---------------------------- -- Records of t_permission -- ---------------------------- INSERT INTO `t_permission` VALUES ("1", "1", "user:create"); INSERT INTO `t_permission` VALUES ("2", "2", "user:update"); -- ---------------------------- -- Table structure for `t_role` -- ---------------------------- DROP TABLE IF EXISTS `t_role`; CREATE TABLE `t_role` ( `id` int(11) NOT NULL AUTO_INCREMENT, `rolename` varchar(20) COLLATE utf8mb4_bin NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; -- ---------------------------- -- Records of t_role -- ---------------------------- INSERT INTO `t_role` VALUES ("1", "teacher"); INSERT INTO `t_role` VALUES ("2", "student"); -- ---------------------------- -- Table structure for `t_user` -- ---------------------------- DROP TABLE IF EXISTS `t_user`; CREATE TABLE `t_user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(20) COLLATE utf8mb4_bin NOT NULL, `password` varchar(20) COLLATE utf8mb4_bin NOT NULL, `role_id` int(11) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; -- ---------------------------- -- Records of t_user -- ---------------------------- INSERT INTO `t_user` VALUES ("1", "admin", "admin", "1"); INSERT INTO `t_user` VALUES ("2", "test", "123456", "2"); -- ---------------------------- -- Table structure for `user` -- ---------------------------- DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `username` varchar(32) COLLATE utf8mb4_bin NOT NULL, `password` varchar(32) COLLATE utf8mb4_bin NOT NULL, `email` varchar(32) COLLATE utf8mb4_bin NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; -- ---------------------------- -- Records of user -- ---------------------------- INSERT INTO `user` VALUES ("1", "張三", "123456", "835852265@qq.com");pom.xml:maven相關(guān)
log4j log4j ${log4j.version} org.slf4j slf4j-api ${slf4j.version} org.slf4j slf4j-log4j12 ${slf4j.version} org.apache.shiro shiro-all ${shiro-version} org.projectlombok lombok 1.16.8
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/70331.html
摘要:作者重慶森林鏈接來源牛客網(wǎng)整個三月份通過牛客網(wǎng)和網(wǎng)友分享的經(jīng)驗學到了很多東西,現(xiàn)在反饋一下我的面試經(jīng)歷,希望對同學們有幫助。個人情況大三本方向渣碩,經(jīng)過實驗室學長內(nèi)推,于三月底完成面試。校招是實力和運氣的結(jié)合,缺一不可。 歡迎關(guān)注我的微信公眾號:Java面試通關(guān)手冊(堅持原創(chuàng),分享美文,分享各種Java學習資源,面試題,以及企業(yè)級Java實戰(zhàn)項目回復關(guān)鍵字免費領(lǐng)取):showImg(h...
面試時7份靠能力,3份靠技能,而剛開始時的介紹項目又是技能中的重中之重,決定一次面試的成敗,那么面試時如果介紹自己的項目呢? 1、在面試前準備項目描述 別害怕,因為面試官什么都不知道,面試官是人,不是神,拿到你的簡歷的時候,是沒法核實你的項目細節(jié)的。更何況,你做的項目是以月為單位算的,而面試官最多用30分鐘來從你的簡歷上了解你的項目經(jīng)驗,所以你對項目的熟悉程度要遠遠超過面試官,所以你一點也不用緊張...
面試時7份靠能力,3份靠技能,而剛開始時的介紹項目又是技能中的重中之重,決定一次面試的成敗,那么面試時如果介紹自己的項目呢? 1、在面試前準備項目描述 別害怕,因為面試官什么都不知道,面試官是人,不是神,拿到你的簡歷的時候,是沒法核實你的項目細節(jié)的。更何況,你做的項目是以月為單位算的,而面試官最多用30分鐘來從你的簡歷上了解你的項目經(jīng)驗,所以你對項目的熟悉程度要遠遠超過面試官,所以你一點也不用緊張...
摘要:我覺得了解簡歷和面試的技巧可以幫助你更好的去學習重要的知識點以及更好地去準備面試以及面試,說實話,我個人覺得這些東西還挺重要的。在本文里,我將介紹我這段時間里更新簡歷和面試的相關(guān)經(jīng)歷。 分享一篇很不錯的文章!本文作者曾經(jīng)寫過《Java Web輕量級開發(fā)面試教程》和 《Java核心技術(shù)及面試指南》這兩本書。我覺得了解簡歷和面試的技巧可以幫助你更好的去學習重要的知識點以及更好地去準備面試以...
閱讀 2664·2021-11-18 10:02
閱讀 3426·2021-09-22 15:50
閱讀 2359·2021-09-06 15:02
閱讀 3577·2019-08-29 16:34
閱讀 1745·2019-08-29 13:49
閱讀 1275·2019-08-29 13:29
閱讀 3629·2019-08-28 18:08
閱讀 2937·2019-08-26 11:52