亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

spring-springmvc-mybatis-shiro項(xiàng)目介紹

fanux / 2255人閱讀

摘要:項(xiàng)目介紹在之前的整合項(xiàng)目之后,新增日志簡(jiǎn)單集成,之前的代碼不予展示與介紹,想了解的請(qǐng)參考整合項(xiàng)目項(xiàng)目代碼獲取項(xiàng)目結(jié)構(gòu)代碼控制層,,主要包含登錄及幾個(gè)頁(yè)面跳轉(zhuǎn)會(huì)跳到我們自定義的中登錄用戶名或密碼錯(cuò)誤業(yè)務(wù)處理層,包含一個(gè)包,以接口類型存在

spring-springmvc-mybatis-shiro項(xiàng)目介紹

在之前的mybatis整合項(xiàng)目之后,新增日志、簡(jiǎn)單集成shiro,之前的代碼不予展示與介紹,想了解的請(qǐng)參考mybatis整合項(xiàng)目
項(xiàng)目代碼獲取:https://github.com/pysasuke/s...

項(xiàng)目結(jié)構(gòu) java:代碼

controller:控制層,ShiroUserController,主要包含登錄及幾個(gè)頁(yè)面跳轉(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);//會(huì)跳到我們自定義的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", "用戶名或密碼錯(cuò)誤!");
            return "login";
        }
    }

service:業(yè)務(wù)處理層,包含一個(gè)impl包,Service以接口類型存在,impl包下存放Service接口的實(shí)現(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 Set getRoles(String username) {
        return shiroUserMapper.getRoles(username);
    }

    public Set getPermissions(String username) {
        return shiroUserMapper.getPermissions(username);
    }
}

dao:數(shù)據(jù)庫(kù)交互層

model:實(shí)體對(duì)象層

realm: 自定義Realm(shiro相關(guān))

public class MyRealm extends AuthorizingRealm {

    @Resource
    private ShiroUserService shiroUserService;

    // 為當(dāng)前登陸成功的用戶授予權(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;
    }

    // 驗(yàn)證當(dāng)前登錄的用戶,獲取認(rèn)證信息
    @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ù)庫(kù)相關(guān)參數(shù)

log4j.properties:日志相關(guān)配置

###Log4j建議只使用四個(gè)級(jí)別,優(yōu)先級(jí)從高到低分別是ERROR、WARN、INFO、DEBUG
log4j.rootLogger=info, console, log, error

###Console ###
#輸出到控制臺(tái)
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
#文件路徑(絕對(duì)路徑)
log4j.appender.log.File = E:/my_project/spring-springmvc-mybatis/logs/log.log
#true為追加,false為覆蓋,默認(rèn)為true
log4j.appender.log.Append = true

#針對(duì)DEBUG級(jí)別以上的日志,低于DEBUG級(jí)別的日志不顯示,這里設(shè)置為DEBUG沒(méi)有意義
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

###控制臺(tái)打印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

 
    
        shiroFilter
        org.springframework.web.filter.DelegatingFilterProxy
        
            
            targetFilterLifecycle
            true
        
    
    
        shiroFilter
        /*
    
 其他文件 logs:日志存放

error.log:記錄error級(jí)別日志

log.log:記錄其他日志

deploy:部署文件,sql

update.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)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/70331.html

相關(guān)文章

  • 一個(gè)JAVA渣渣的校招成長(zhǎng)記,附BAT美團(tuán)網(wǎng)易等20家面經(jīng)總結(jié)

    摘要:作者重慶森林鏈接來(lái)源牛客網(wǎng)整個(gè)三月份通過(guò)??途W(wǎng)和網(wǎng)友分享的經(jīng)驗(yàn)學(xué)到了很多東西,現(xiàn)在反饋一下我的面試經(jīng)歷,希望對(duì)同學(xué)們有幫助。個(gè)人情況大三本方向渣碩,經(jīng)過(guò)實(shí)驗(yàn)室學(xué)長(zhǎng)內(nèi)推,于三月底完成面試。校招是實(shí)力和運(yùn)氣的結(jié)合,缺一不可。 歡迎關(guān)注我的微信公眾號(hào):Java面試通關(guān)手冊(cè)(堅(jiān)持原創(chuàng),分享美文,分享各種Java學(xué)習(xí)資源,面試題,以及企業(yè)級(jí)Java實(shí)戰(zhàn)項(xiàng)目回復(fù)關(guān)鍵字免費(fèi)領(lǐng)?。簊howImg(h...

    mozillazg 評(píng)論0 收藏0
  • 程序員面試時(shí)這樣介紹自己的項(xiàng)目經(jīng)驗(yàn),成功率能達(dá)到98.99%

    面試時(shí)7份靠能力,3份靠技能,而剛開始時(shí)的介紹項(xiàng)目又是技能中的重中之重,決定一次面試的成敗,那么面試時(shí)如果介紹自己的項(xiàng)目呢? 1、在面試前準(zhǔn)備項(xiàng)目描述 別害怕,因?yàn)槊嬖嚬偈裁炊疾恢?,面試官是人,不是神,拿到你的?jiǎn)歷的時(shí)候,是沒(méi)法核實(shí)你的項(xiàng)目細(xì)節(jié)的。更何況,你做的項(xiàng)目是以月為單位算的,而面試官最多用30分鐘來(lái)從你的簡(jiǎn)歷上了解你的項(xiàng)目經(jīng)驗(yàn),所以你對(duì)項(xiàng)目的熟悉程度要遠(yuǎn)遠(yuǎn)超過(guò)面試官,所以你一點(diǎn)也不用緊張...

    ad6623 評(píng)論0 收藏0
  • 程序員面試時(shí)這樣介紹自己的項(xiàng)目經(jīng)驗(yàn),成功率能達(dá)到98.99%

    面試時(shí)7份靠能力,3份靠技能,而剛開始時(shí)的介紹項(xiàng)目又是技能中的重中之重,決定一次面試的成敗,那么面試時(shí)如果介紹自己的項(xiàng)目呢? 1、在面試前準(zhǔn)備項(xiàng)目描述 別害怕,因?yàn)槊嬖嚬偈裁炊疾恢溃嬖嚬偈侨?,不是神,拿到你的?jiǎn)歷的時(shí)候,是沒(méi)法核實(shí)你的項(xiàng)目細(xì)節(jié)的。更何況,你做的項(xiàng)目是以月為單位算的,而面試官最多用30分鐘來(lái)從你的簡(jiǎn)歷上了解你的項(xiàng)目經(jīng)驗(yàn),所以你對(duì)項(xiàng)目的熟悉程度要遠(yuǎn)遠(yuǎn)超過(guò)面試官,所以你一點(diǎn)也不用緊張...

    shadowbook 評(píng)論0 收藏0
  • 一位大佬的親身經(jīng)歷總結(jié):簡(jiǎn)歷和面試的技巧

    摘要:我覺(jué)得了解簡(jiǎn)歷和面試的技巧可以幫助你更好的去學(xué)習(xí)重要的知識(shí)點(diǎn)以及更好地去準(zhǔn)備面試以及面試,說(shuō)實(shí)話,我個(gè)人覺(jué)得這些東西還挺重要的。在本文里,我將介紹我這段時(shí)間里更新簡(jiǎn)歷和面試的相關(guān)經(jīng)歷。 分享一篇很不錯(cuò)的文章!本文作者曾經(jīng)寫過(guò)《Java Web輕量級(jí)開發(fā)面試教程》和 《Java核心技術(shù)及面試指南》這兩本書。我覺(jué)得了解簡(jiǎn)歷和面試的技巧可以幫助你更好的去學(xué)習(xí)重要的知識(shí)點(diǎn)以及更好地去準(zhǔn)備面試以...

    pingan8787 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<