一、登录界面(部分) <DIV CLASS = "コンテナ"> <DIV CLASS = "行"> <DIV CLASS = "COL-MD-8 COL-MD-オフセット-2"> <DIV CLASS = "ログインパネルパネルパネル-デフォルト"> <divのクラスには、="パネルの見出し"> <h3のクラスには、="パネル・タイトル">请登录</ H3> </ div> <divのクラス="パネル体"> <フォームの役割= "フォーム" ACTION = "$ {pageContext.request.contextPath} /ログイン" METHOD = "POST"> <フィールドセット> <DIV CLASS = "フォームグループ"> <入力クラス= "フォームコントロール"プレースホルダ= "账户名" NAME = "ユーザ名"オートフォーカス> </ div> <DIV CLASS = "フォームグループ"> <入力クラス= "フォームコントロール"プレースホルダ= "密码" NAME = "パスワード"タイプ= "パスワード"> </ div> <DIV CLASS = "チェックボックス"> <ラベル> <入力名= "覚えて"タイプ= "チェックボックス"値= "リメンバー・ミー">记住我 </ label>は </ DIV> の<input type = "登录" =値"を提出する"クラス= "BTN BTN-主なフォーム-コントロール"> </フィールドセット> </ FORM> </ div> </ div> </ div> </ div> </ div> 第二に、着陸コントローラ @Controller パブリッククラスLoginController { @Resource(名= "userBizImpl") UserBiz userBiz。 ( "ログイン")@RequestMapping パブリック文字列ログイン(HttpServletRequestのREQ、モデルモデル、HttpSessionのセッション){ 文字列exceptionClassName =(文字列)req.getAttribute( "shiroLoginFailure")。 文字列のエラー= NULL; //异常处理 場合(UnknownAccountException.class.getName()に等しい(exceptionClassName)){ エラー= "用户名/密码错误"。 }そうであれば(IncorrectCredentialsException.class.getName()。等号(exceptionClassName)){ エラー= "用户名/密码错误" }そうであれば(!exceptionClassName = NULL){ エラー= "其他错误:" + exceptionClassName。 // TODO动态生成页面 org.apache.shiro.subject.Subject被写体= SecurityUtils.getSubject()。 ブールにisAuthenticated = subject.isAuthenticated()。 (にisAuthenticated){場合 のSystem.out.println( "!"); 文字列プリンシパル=(文字列)subject.getPrincipal(); session.setAttribute( "ユーザ名"、校長); //不同角色对应的页面 スイッチ(主){ 場合、 "管理者": リターン"/管理/メイン"; ケース「先生」: ケース「学生」: リターン「/学生/メイン」; ケース" リターンは、「リダイレクト:supplier.do/supplier.viewを」; } } リターン"リダイレクト:login.jspをします"; } } 三、ユーザ控制层实现(部分) @Service パブリッククラスUserBizImplはUserBiz {実装 @Resource UserDao userDaoは、 @Resource RoleDao roleDao。 @Resource StaffDao staffDao。 @Resource プライベートPasswordHelper passwordHelper。 @Resource(名前= "roleBizImpl") プライベートRoleBiz roleBiz。 @Override 公共の一覧は<UserVo> findAllの()、にInvocationTargetExceptionがスローされます 一覧<UserVo> userVoList =新しいArrayListを<>(); 一覧USERLIST = userDao.findAll(); イテレータイテレータ= userList.iterator()。 (iterator.hasNext()){一方 のStringBuilder S =新規のStringBuilder(); ユーザのユーザ=(ユーザー)iterator.next(); 一覧<ロング> roleIds = user.getRoleIds(); UserVo userVo =新しいUserVo(); BeanUtils.copyProperties(userVo、ユーザ) (!roleIds = null)の場合は{ I = 0をint型。 INTサイズ= roleIds.size()。 用(; iは、サイズ< - 1; iは++){ 役割役割= roleDao.findOne(roleIds.get(I))。 s.append(role.getDescription())。 s.append( ""); } 役割の役割= roleDao.findOne(roleIds.get(I)); s.append(role.getDescription())。 userVo.setRoleIdsStr(s.toString())。 } userVoList.add(userVo)。 } 戻りuserVoList。 } ... } 四、ロール控制层实现(部分) @Service パブリッククラスRoleBizImplはRoleBiz {実装 @Resource プライベートRoleDao roleDaoと、 @Resource(名前= "resourceBizImpl") プライベートResourceBiz resourceBiz。 ... @Override {(roleIdsロングroleId)のために 公共の設定<文字列> findRoles(ロング... roleIds){ 設定して<文字列>の役割=新しいHashSetの<文字列>(); } 役割の役割= findOne(roleId)。 (もし!役割= NULL){ roles.add(role.getRole()); } } ロールを返します。 } @Override 公共セットの<string> findPermissions(ロング[] roleIds){ セット<ロング> resourceIds =新しいHashSetの<ロング>(); (ロングroleId:roleIds)用{ 役割役割= findOne(roleId)。 (もし!役割= NULL){ resourceIds.addAll(role.getResourceIds()); } } 戻りresourceBiz.findPermissions(resourceIds)。 } 五、教材订购コントローラ @Controller @RequestMapping( "orderbook.do") パブリッククラスOrderBookController { @Resource(名= "orderBookBizImpl") プライベートOrderBookBiz orderBookBiz。 @RequiresRoles(値= { "管理者"、 "教師"}、論理= Logical.OR) @RequestMapping( "orderbook.view") パブリック文字列orderBookView(モデルm、HttpSessionのHttpSessionの){ 文字列staffId =(文字列)httpSession.getAttribute ( "ユーザ名"); 一覧<節> sectionList = orderBookBiz.findSelectedSection(staffId、TermContainer.now()); INT courseCount = sectionList.size()。 m.addAttribute( "selectedSectionList"、sectionList)。 リターン「/教師/オーダー・ブック」。 @RequiresRoles(値= { "管理者"、 "教師"}、論理= Logical.OR) @RequestMapping( "orderbook_review.view") パブリック文字列orderBookReviewView(モデルm、HttpSessionのセッション){ にsession.setAttribute( "notReviewedBookList"、orderBookBiz .findAllNotReviewedBook())。 リターン"/教師/ orderbook_review"; } @RequiresRoles(値= { "管理者"、 "教師"}、論理= Logical.OR) @RequestMapping( "orderbook_add.view") パブリック文字列orderBookAddView(モデルm){ リターン"/教師/ orderbook_add"。 } @RequiresRoles(値= { "admin"を、 @RequestMapping( "orderbook_added.view" 文字列staffId =(文字列)session.getAttribute( "ユーザ名")。 m.addAttribute( "addedBookInfoList"、orderBookBiz.findAddedBookInfoList(staffId)); リターン"/教師/ orderbook_added"; } @RequiresRoles(値= { "管理者"、 "教師"}、論理= Logical.OR) @RequestMapping( "追加") パブリック文字列(HttpServletRequestのリクエスト、HttpSessionのセッション){追加 地図の地図= request.getParameterMapを(); OrderBookVo orderBookVo =新しいOrderBookVo(); orderBookVo.setStaffId((String)をsession.getAttribute( "ユーザ名")); orderBookVo.setMap(マップ) ;: "/orderbook.do/orderbook.viewをリダイレクトする"を返します (論理値= { "管理者"、 "教師"}、= Logical.OR)が@RequiresRoles @RequestMapping( "更新") @ResponseStatus(値= HttpStatus.OK) 公共ボイド更新(@RequestBody ChangedItems changedItems、HttpSessionのセッション){ orderBookBiz.update(changedItems、(文字列)session.getAttribute( "ユーザ名")); } @RequiresRoles(値= { "管理者"、 "教師"}、論理= Logical.OR) @RequestMapping( "監査") パブリック文字列監査(HttpSessionのセッション){ リスト<OrderBookReviewVo> orderBookReviewVoList =(一覧<OrderBookReviewVo>)セッション.getAttribute(」 ;: "/orderbook.do/orderbook_review.viewリダイレクト"返す 公共ボイド追加(OrderBookVo orderBookVo){ 六、教材订购控制层实现 @Service パブリッククラスOrderBookBizImplはOrderBookBiz {実装 @Resource OrderBookDao orderBookDaoと、 @Resource SectionDao sectionDao。 @Resource BookDao bookDao。 @Resource TakesDao takesDao。 公共int型ITEMNUM = 8; @Override 公共一覧<節> findSelectedSection(文字列staffId、文字列の年){ sectionDao.findSelectedSection(staffId、年)を返します。 } @Transactional @Override ストリングstaffId = orderBookVo.getStaffId()。 地図フォーム= orderBookVo.getMap(); 。イテレータイテレータ= forms.entrySet()反復子(); (iterator.hasNext()){一方 のMap.Entry <文字列、文字列[]>フォーム=(のMap.Entry <文字列、文字列[]>)iterator.next(); 文字列[]アイテム= form.getValue()。 INTはbookcount =(items.length - 1)/ ITEMNUM。 int型J = 1; INT secId = Short.valueOf(項目[0])。 {ための式(I ++; iは<私はbookcount = 0 INT))( 文字列bookTitleでは=商品[J ++]トリム。 文字列ISBN =項目[J ++](トリミング)。 ストリングdataOfPringting =商品[J ++](トリミング)。 文字列の作者=項目[J ++](トリム)。 文字列のプレス=項目[J ++](トリム)。 文字列のカテゴリ=項目[J ++](トリム)。 短い単価= 0。 もし{(項目[J ++]等号( "")!) 単価= Short.valueOf(項目[J - 1])。 } 文字列備考=項目[J ++](トリミング)。 ブックブック=新しいブック(); book.setBookTitle(bookTitleで)。 book.setIsbn(ISBN)。 book.setDateOfPrinting(dataOfPringting)。 book.setAuthor(著者); book.setPress(プレス); book.setCategory(カテゴリ); book.setUnitPrice(単価)。 オーダーブックオーダーブック=新しいオーダーブック(); orderBook.setIsbn(ISBN)。 orderBook.setBookTitle(bookTitleで)。 orderBook.setStaffId(staffId)。 orderBook.setRemark(備考)。 orderBook.setSecId(secId)。 orderBook.setApproval(偽); orderBookDao.add(オーダ・ブック)。 (bookDao.find(bookTitleで、ISBN)== null)の場合は bookDao.add(書籍); } } } @Override 公衆リスト<AddedBookVo> findAddedBookInfoList(文字列staffId){ orderBookDao.findAddedBookInfoList(staffId)を返します。 } @Transactional @Override 公共ボイド更新(ChangedItemsのchangedItems、ストリングstaffId){ 偽usedByOtherSec =ブール。 INT secId = changedItems.getSecID()。 一覧<ChangedItems.AlterItem> alterItemList = changedItems.getAlterItemList(); 文字列bookTitleで、 文字列ISBN; イテレータイテレータ= alterItemList.iterator()。 一方、(iterator.hasNext()){ ChangedItems.AlterItem alterItem =(ChangedItems.AlterItem)iterator.next(); bookTitleで= alterItem.getBookTitle()。 ISBN = alterItem.getIsbn()。 IF(orderBookDao.usedByOtherSec(bookTitleで、ISBN、secId)== 1){ usedByOtherSec = TRUE。 } ストリングnewBookTitle = alterItem.getNewBookTitle()。 ストリングnewIsbn = alterItem.getNewIsbn()。 ストリングnewDateOfPrinting = alterItem.getNewDateOfPrinting()。 ストリングnewAuthor = alterItem.getNewAuthor()。 ストリングnewPress = alterItem.getNewPress()。 ストリングnewCategory = alterItem.getNewCategory()。 文字列TEMP = alterItem.getNewUnitPrice()。 ストリングnewRemark = alterItem.getNewRemark()。 短いnewUnitPrice = 0。 (もし!temp.equals( "")){ newUnitPrice = Short.valueOf(温度)。 } ブックブック=新しいブック(); book.setBookTitle(newBookTitle)。 book.setIsbn(newIsbn)。 book.setDateOfPrinting(newDateOfPrinting)。 book.setAuthor(newAuthor)。 book.setPress(newPress)。 book.setCategory(newCategory)。 book.setUnitPrice(newUnitPrice)。 (!usedByOtherSec)であれば bookDao.delete(bookTitleで、ISBN)。 //判断图书存在 (bookDao.find(newBookTitle、newIsbn)== null)の場合は bookDao.add(書籍); orderBookDao.delete(secId、bookTitleで、ISBN)。 オーダーブックオーダーブック=新しいオーダーブック(); orderBook.setIsbn(newIsbn)。 orderBook.setSecId(secId)。 orderBook.setStaffId(staffId)。 orderBook.setBookTitle(newBookTitle)。 orderBook.setRemark(newRemark)。 orderBookDao.add(オーダ・ブック)。 } リスト<ChangedItems.DeleteItem> deleteItemList = changedItems.getDeleteItemList()。 反復子= deleteItemList.iterator()。 一方、(iterator.hasNext()){ ChangedItems.DeleteItem deleteItem =(ChangedItems.DeleteItem)iterator.next(); ISBN = deleteItem.getIsbn()。 bookTitleで= deleteItem.getBookTitle()。 orderBookDao.delete(secId、bookTitleで、ISBN)。 (もし!usedByOtherSec) bookDao.delete(bookTitleで、ISBN)。 } } @Override 公共ボイド監査(一覧<OrderBookReviewVo> orderBookReviewVoList){ イテレータイテレータ= orderBookReviewVoList.iterator()。 (iterator.hasNext()){一方 OrderBookReviewVo orderBookReviewVo =(OrderBookReviewVo)iterator.next(); INT secId = orderBookReviewVo.getSecId()。 ストリングbookTitleで= orderBookReviewVo.getBookTitle()。 文字列ISBN = orderBookReviewVo.getIsbn()。 orderBookDao.audit(secId、bookTitleで、ISBN)。 } } @Override 公衆リスト<OrderBookReviewVo> findAllNotReviewedBook(){ 一覧<OrderBookReviewVo> orderBookReviewVoList = orderBookDao.findAllNotReviewedBook()。 イテレータイテレータ= orderBookReviewVoList.iterator()。 一方、(iterator.hasNext()){ OrderBookReviewVoのTEMP =(OrderBookReviewVo)iterator.next(); INT secId = temp.getSecId()。 INT stdCount = takesDao.getStdCountInSection(secId)。 temp.setStdCount(stdCount)。 } 戻りorderBookReviewVoList。 } }