├── .gitattributes
├── .gitignore
├── README.md
└── jrbac
├── .externalToolBuilders
└── org.eclipse.wst.jsdt.core.javascriptValidator (1).launch
├── .settings
├── .jsdtscope
├── org.eclipse.core.resources.prefs
├── org.eclipse.jdt.core.prefs
├── org.eclipse.jst.j2ee.ejb.annotations.xdoclet.prefs
├── org.eclipse.ltk.core.refactoring.prefs
├── org.eclipse.m2e.core.prefs
├── org.eclipse.wst.common.component
├── org.eclipse.wst.common.project.facet.core.xml
├── org.eclipse.wst.html.core.prefs
├── org.eclipse.wst.jsdt.ui.superType.container
├── org.eclipse.wst.jsdt.ui.superType.name
├── org.eclipse.wst.validation.prefs
└── org.eclipse.wst.ws.service.policy.prefs
├── pom.xml
└── src
├── main
├── java
│ └── com
│ │ └── jrbac
│ │ ├── context
│ │ ├── BaseReturn.java
│ │ ├── ErrorCode.java
│ │ ├── GeetConfig.java
│ │ ├── GeetestLib.java
│ │ ├── Param.java
│ │ ├── Progress.java
│ │ └── SessionParam.java
│ │ ├── controller
│ │ ├── LoginController.java
│ │ ├── TestController.java
│ │ ├── admin
│ │ │ ├── HomeController.java
│ │ │ ├── MenuController.java
│ │ │ ├── RoleController.java
│ │ │ └── UserController.java
│ │ └── gesture
│ │ │ ├── CaptchaController.java
│ │ │ └── VerifyLoginServlet.java
│ │ ├── dao
│ │ ├── LoginUserDao.java
│ │ ├── MenuDao.java
│ │ └── RoleDao.java
│ │ ├── entity
│ │ ├── LoginUser.java
│ │ ├── Menu.java
│ │ ├── Role.java
│ │ └── Teacher.java
│ │ ├── enums
│ │ └── StateEnum.java
│ │ ├── listener
│ │ └── FileUploadProgressListener.java
│ │ ├── model
│ │ ├── LoginUserVO.java
│ │ └── Ztree.java
│ │ ├── service
│ │ ├── ImageService.java
│ │ ├── LoginUserService.java
│ │ ├── MenuService.java
│ │ ├── RoleService.java
│ │ ├── SessionService.java
│ │ ├── ZtreeService.java
│ │ └── impl
│ │ │ ├── LoginUserServiceImpl.java
│ │ │ ├── MenuServiceImpl.java
│ │ │ └── RoleServiceImpl.java
│ │ ├── shiro
│ │ ├── MyShiroRealm.java
│ │ ├── UserAuthService.java
│ │ └── UserAuthServiceImpl.java
│ │ ├── spring
│ │ └── CustomMultipartResolver.java
│ │ └── util
│ │ ├── DESUtil.java
│ │ ├── HttpUtil.java
│ │ ├── MenuUtil.java
│ │ ├── PasswordUtil.java
│ │ └── UUIDGenerator.java
├── resources
│ ├── config.properties
│ ├── jdbc.properties
│ ├── log4j.properties
│ ├── mybatis-config.xml
│ ├── spring
│ │ ├── spring-core.xml
│ │ ├── spring-mvc.xml
│ │ ├── spring-mybatis.xml
│ │ └── spring-shiro.xml
│ └── sql
│ │ ├── jrbac.sql
│ │ ├── mapper
│ │ ├── LoginUserDao.xml
│ │ ├── MenuDao.xml
│ │ └── RoleDao.xml
│ │ └── schema.sql
└── webapp
│ ├── WEB-INF
│ ├── views
│ │ ├── admin
│ │ │ ├── head
│ │ │ │ ├── head.jsp
│ │ │ │ └── nav.jsp
│ │ │ ├── home
│ │ │ │ └── index.jsp
│ │ │ ├── login.jsp
│ │ │ ├── menu
│ │ │ │ └── index.jsp
│ │ │ ├── role
│ │ │ │ └── index.jsp
│ │ │ ├── test
│ │ │ │ ├── buttons.jsp
│ │ │ │ ├── fileupload.jsp
│ │ │ │ ├── form.jsp
│ │ │ │ ├── icons.jsp
│ │ │ │ ├── second.jsp
│ │ │ │ └── third.jsp
│ │ │ └── user
│ │ │ │ ├── index.jsp
│ │ │ │ └── setting.jsp
│ │ ├── common
│ │ │ └── tag.jsp
│ │ └── mobile
│ │ │ └── index.jsp
│ └── web.xml
│ ├── assets
│ ├── admin
│ │ └── login
│ │ │ ├── css
│ │ │ ├── bootstrap-social.css
│ │ │ ├── bootstrap-theme.min.css
│ │ │ ├── bootstrap.min.css
│ │ │ ├── font-awesome.min.css
│ │ │ └── templatemo_style.css
│ │ │ ├── fonts
│ │ │ ├── FontAwesome.otf
│ │ │ ├── fontawesome-webfont.eot
│ │ │ ├── fontawesome-webfont.svg
│ │ │ ├── fontawesome-webfont.ttf
│ │ │ └── fontawesome-webfont.woff
│ │ │ └── images
│ │ │ └── bg.jpeg
│ ├── common
│ │ ├── jquery.min.js
│ │ └── showTip.js
│ ├── mobile
│ │ └── weui
│ │ │ └── css
│ │ │ ├── weui.css
│ │ │ └── weui.min.css
│ ├── plugins
│ │ ├── bootstrap-plugin
│ │ │ ├── bootstrap-datetimepicker
│ │ │ │ ├── css
│ │ │ │ │ ├── bootstrap-datetimepicker.css
│ │ │ │ │ └── bootstrap-datetimepicker.min.css
│ │ │ │ └── js
│ │ │ │ │ ├── bootstrap-datetimepicker.js
│ │ │ │ │ ├── bootstrap-datetimepicker.min.js
│ │ │ │ │ └── locales
│ │ │ │ │ └── bootstrap-datetimepicker.zh-CN.js
│ │ │ ├── bootstrap-fileinput
│ │ │ │ ├── .github
│ │ │ │ │ ├── CONTRIBUTING.md
│ │ │ │ │ ├── ISSUE_TEMPLATE.md
│ │ │ │ │ └── PULL_REQUEST_TEMPLATE.md
│ │ │ │ ├── .gitignore
│ │ │ │ ├── CHANGE.md
│ │ │ │ ├── LICENSE.md
│ │ │ │ ├── README.md
│ │ │ │ ├── bower.json
│ │ │ │ ├── composer.json
│ │ │ │ ├── css
│ │ │ │ │ ├── fileinput.css
│ │ │ │ │ └── fileinput.min.css
│ │ │ │ ├── img
│ │ │ │ │ ├── loading-sm.gif
│ │ │ │ │ └── loading.gif
│ │ │ │ ├── js
│ │ │ │ │ ├── fileinput.js
│ │ │ │ │ ├── fileinput.min.js
│ │ │ │ │ ├── locales
│ │ │ │ │ │ ├── LANG.js
│ │ │ │ │ │ ├── ar.js
│ │ │ │ │ │ ├── bg.js
│ │ │ │ │ │ ├── ca.js
│ │ │ │ │ │ ├── cr.js
│ │ │ │ │ │ ├── cz.js
│ │ │ │ │ │ ├── da.js
│ │ │ │ │ │ ├── de.js
│ │ │ │ │ │ ├── el.js
│ │ │ │ │ │ ├── es.js
│ │ │ │ │ │ ├── fa.js
│ │ │ │ │ │ ├── fi.js
│ │ │ │ │ │ ├── fr.js
│ │ │ │ │ │ ├── hu.js
│ │ │ │ │ │ ├── id.js
│ │ │ │ │ │ ├── it.js
│ │ │ │ │ │ ├── ja.js
│ │ │ │ │ │ ├── nl.js
│ │ │ │ │ │ ├── pl.js
│ │ │ │ │ │ ├── pt-BR.js
│ │ │ │ │ │ ├── pt.js
│ │ │ │ │ │ ├── ro.js
│ │ │ │ │ │ ├── ru.js
│ │ │ │ │ │ ├── sk.js
│ │ │ │ │ │ ├── th.js
│ │ │ │ │ │ ├── tr.js
│ │ │ │ │ │ ├── uk.js
│ │ │ │ │ │ ├── vi.js
│ │ │ │ │ │ ├── zh-TW.js
│ │ │ │ │ │ └── zh.js
│ │ │ │ │ └── plugins
│ │ │ │ │ │ ├── canvas-to-blob.js
│ │ │ │ │ │ ├── canvas-to-blob.min.js
│ │ │ │ │ │ ├── purify.js
│ │ │ │ │ │ ├── purify.min.js
│ │ │ │ │ │ ├── sortable.js
│ │ │ │ │ │ └── sortable.min.js
│ │ │ │ ├── nuget
│ │ │ │ │ ├── Package.nuspec
│ │ │ │ │ └── build.bat
│ │ │ │ ├── package.json
│ │ │ │ ├── sass
│ │ │ │ │ └── fileinput.scss
│ │ │ │ └── themes
│ │ │ │ │ ├── fa
│ │ │ │ │ └── theme.js
│ │ │ │ │ └── gly
│ │ │ │ │ └── theme.js
│ │ │ └── bootstrap-iconpicker
│ │ │ │ ├── .gitignore
│ │ │ │ ├── .travis.yml
│ │ │ │ ├── css
│ │ │ │ ├── bootstrap-iconpicker.css
│ │ │ │ └── bootstrap-iconpicker.min.css
│ │ │ │ ├── icon-fonts
│ │ │ │ ├── elusive-icons-2.0.0
│ │ │ │ │ ├── css
│ │ │ │ │ │ ├── elusive-icons.css
│ │ │ │ │ │ └── elusive-icons.min.css
│ │ │ │ │ └── fonts
│ │ │ │ │ │ ├── Elusive-Icons.eot
│ │ │ │ │ │ ├── Elusive-Icons.svg
│ │ │ │ │ │ ├── Elusive-Icons.ttf
│ │ │ │ │ │ └── Elusive-Icons.woff
│ │ │ │ ├── font-awesome-4.0.0
│ │ │ │ │ ├── css
│ │ │ │ │ │ ├── font-awesome.css
│ │ │ │ │ │ └── font-awesome.min.css
│ │ │ │ │ └── fonts
│ │ │ │ │ │ ├── FontAwesome.otf
│ │ │ │ │ │ ├── fontawesome-webfont.eot
│ │ │ │ │ │ ├── fontawesome-webfont.svg
│ │ │ │ │ │ ├── fontawesome-webfont.ttf
│ │ │ │ │ │ └── fontawesome-webfont.woff
│ │ │ │ ├── font-awesome-4.1.0
│ │ │ │ │ ├── css
│ │ │ │ │ │ ├── font-awesome.css
│ │ │ │ │ │ └── font-awesome.min.css
│ │ │ │ │ └── fonts
│ │ │ │ │ │ ├── FontAwesome.otf
│ │ │ │ │ │ ├── fontawesome-webfont.eot
│ │ │ │ │ │ ├── fontawesome-webfont.svg
│ │ │ │ │ │ ├── fontawesome-webfont.ttf
│ │ │ │ │ │ └── fontawesome-webfont.woff
│ │ │ │ ├── font-awesome-4.2.0
│ │ │ │ │ ├── css
│ │ │ │ │ │ ├── font-awesome.css
│ │ │ │ │ │ └── font-awesome.min.css
│ │ │ │ │ └── fonts
│ │ │ │ │ │ ├── FontAwesome.otf
│ │ │ │ │ │ ├── fontawesome-webfont.eot
│ │ │ │ │ │ ├── fontawesome-webfont.svg
│ │ │ │ │ │ ├── fontawesome-webfont.ttf
│ │ │ │ │ │ └── fontawesome-webfont.woff
│ │ │ │ ├── ionicons-1.5.2
│ │ │ │ │ ├── css
│ │ │ │ │ │ ├── ionicons.css
│ │ │ │ │ │ └── ionicons.min.css
│ │ │ │ │ └── fonts
│ │ │ │ │ │ ├── ionicons.eot
│ │ │ │ │ │ ├── ionicons.svg
│ │ │ │ │ │ ├── ionicons.ttf
│ │ │ │ │ │ └── ionicons.woff
│ │ │ │ ├── map-icons-2.1.0
│ │ │ │ │ ├── css
│ │ │ │ │ │ ├── map-icons.css
│ │ │ │ │ │ └── map-icons.min.css
│ │ │ │ │ └── fonts
│ │ │ │ │ │ ├── map-icons.dev.svg
│ │ │ │ │ │ ├── map-icons.eot
│ │ │ │ │ │ ├── map-icons.svg
│ │ │ │ │ │ ├── map-icons.ttf
│ │ │ │ │ │ └── map-icons.woff
│ │ │ │ ├── material-design-1.1.1
│ │ │ │ │ ├── css
│ │ │ │ │ │ ├── material-design-iconic-font.css
│ │ │ │ │ │ └── material-design-iconic-font.min.css
│ │ │ │ │ └── fonts
│ │ │ │ │ │ ├── Material-Design-Iconic-Font.eot
│ │ │ │ │ │ ├── Material-Design-Iconic-Font.svg
│ │ │ │ │ │ ├── Material-Design-Iconic-Font.ttf
│ │ │ │ │ │ └── Material-Design-Iconic-Font.woff
│ │ │ │ ├── octicons-2.1.2
│ │ │ │ │ ├── css
│ │ │ │ │ │ ├── octicons.css
│ │ │ │ │ │ └── octicons.min.css
│ │ │ │ │ └── fonts
│ │ │ │ │ │ ├── octicons-local.ttf
│ │ │ │ │ │ ├── octicons.eot
│ │ │ │ │ │ ├── octicons.svg
│ │ │ │ │ │ ├── octicons.ttf
│ │ │ │ │ │ └── octicons.woff
│ │ │ │ ├── typicons-2.0.6
│ │ │ │ │ ├── css
│ │ │ │ │ │ ├── typicons.css
│ │ │ │ │ │ └── typicons.min.css
│ │ │ │ │ └── fonts
│ │ │ │ │ │ ├── typicons.eot
│ │ │ │ │ │ ├── typicons.svg
│ │ │ │ │ │ ├── typicons.ttf
│ │ │ │ │ │ └── typicons.woff
│ │ │ │ └── weather-icons-1.2.0
│ │ │ │ │ ├── css
│ │ │ │ │ ├── weather-icons.css
│ │ │ │ │ └── weather-icons.min.css
│ │ │ │ │ └── fonts
│ │ │ │ │ ├── WeatherIcons-Regular.otf
│ │ │ │ │ ├── weathericons-regular-webfont.eot
│ │ │ │ │ ├── weathericons-regular-webfont.svg
│ │ │ │ │ ├── weathericons-regular-webfont.ttf
│ │ │ │ │ └── weathericons-regular-webfont.woff
│ │ │ │ └── js
│ │ │ │ ├── bootstrap-iconpicker.js
│ │ │ │ ├── bootstrap-iconpicker.min.js
│ │ │ │ └── iconset
│ │ │ │ ├── iconset-all.min.js
│ │ │ │ ├── iconset-elusiveicon-2.0.0.js
│ │ │ │ ├── iconset-elusiveicon-2.0.0.min.js
│ │ │ │ ├── iconset-fontawesome-4.0.0.js
│ │ │ │ ├── iconset-fontawesome-4.0.0.min.js
│ │ │ │ ├── iconset-fontawesome-4.1.0.js
│ │ │ │ ├── iconset-fontawesome-4.1.0.min.js
│ │ │ │ ├── iconset-fontawesome-4.2.0.js
│ │ │ │ ├── iconset-fontawesome-4.2.0.min.js
│ │ │ │ ├── iconset-glyphicon.js
│ │ │ │ ├── iconset-glyphicon.min.js
│ │ │ │ ├── iconset-ionicon-1.5.2.js
│ │ │ │ ├── iconset-ionicon-1.5.2.min.js
│ │ │ │ ├── iconset-mapicon-2.1.0.js
│ │ │ │ ├── iconset-mapicon-2.1.0.min.js
│ │ │ │ ├── iconset-materialdesign-1.1.1.js
│ │ │ │ ├── iconset-materialdesign-1.1.1.min.js
│ │ │ │ ├── iconset-octicon-2.1.2.js
│ │ │ │ ├── iconset-octicon-2.1.2.min.js
│ │ │ │ ├── iconset-typicon-2.0.6.js
│ │ │ │ ├── iconset-typicon-2.0.6.min.js
│ │ │ │ ├── iconset-weathericon-1.2.0.js
│ │ │ │ └── iconset-weathericon-1.2.0.min.js
│ │ ├── cryptojs
│ │ │ ├── core.js
│ │ │ ├── md5.js
│ │ │ ├── mode-ecb.js
│ │ │ └── tripledes.js
│ │ ├── easyform
│ │ │ ├── easyform.css
│ │ │ └── easyform.js
│ │ ├── jquery-cookie
│ │ │ └── jquery.cookie.js
│ │ └── ztree
│ │ │ ├── css
│ │ │ ├── awesomeStyle
│ │ │ │ ├── awesome.css
│ │ │ │ ├── awesome.less
│ │ │ │ ├── fa.less
│ │ │ │ └── img
│ │ │ │ │ └── loading.gif
│ │ │ ├── demo.css
│ │ │ ├── metroStyle
│ │ │ │ ├── img
│ │ │ │ │ ├── line_conn.png
│ │ │ │ │ ├── loading.gif
│ │ │ │ │ ├── metro.gif
│ │ │ │ │ └── metro.png
│ │ │ │ └── metroStyle.css
│ │ │ └── zTreeStyle
│ │ │ │ ├── img
│ │ │ │ ├── diy
│ │ │ │ │ ├── 1_close.png
│ │ │ │ │ ├── 1_open.png
│ │ │ │ │ ├── 2.png
│ │ │ │ │ ├── 3.png
│ │ │ │ │ ├── 4.png
│ │ │ │ │ ├── 5.png
│ │ │ │ │ ├── 6.png
│ │ │ │ │ ├── 7.png
│ │ │ │ │ ├── 8.png
│ │ │ │ │ └── 9.png
│ │ │ │ ├── line_conn.gif
│ │ │ │ ├── loading.gif
│ │ │ │ ├── zTreeStandard.gif
│ │ │ │ └── zTreeStandard.png
│ │ │ │ └── zTreeStyle.css
│ │ │ └── js
│ │ │ ├── jquery-1.4.4.min.js
│ │ │ ├── jquery.ztree.all.js
│ │ │ ├── jquery.ztree.all.min.js
│ │ │ ├── jquery.ztree.core.js
│ │ │ ├── jquery.ztree.core.min.js
│ │ │ ├── jquery.ztree.excheck.js
│ │ │ ├── jquery.ztree.excheck.min.js
│ │ │ ├── jquery.ztree.exedit.js
│ │ │ ├── jquery.ztree.exedit.min.js
│ │ │ ├── jquery.ztree.exhide.js
│ │ │ └── jquery.ztree.exhide.min.js
│ └── sbadmin
│ │ ├── bootstrap
│ │ ├── .bower.json
│ │ └── dist
│ │ │ ├── css
│ │ │ ├── bootstrap-theme.css
│ │ │ ├── bootstrap-theme.css.map
│ │ │ ├── bootstrap-theme.min.css
│ │ │ ├── bootstrap-theme.min.css.map
│ │ │ ├── bootstrap.css
│ │ │ ├── bootstrap.css.map
│ │ │ ├── bootstrap.min.css
│ │ │ └── bootstrap.min.css.map
│ │ │ ├── fonts
│ │ │ ├── glyphicons-halflings-regular.eot
│ │ │ ├── glyphicons-halflings-regular.svg
│ │ │ ├── glyphicons-halflings-regular.ttf
│ │ │ ├── glyphicons-halflings-regular.woff
│ │ │ └── glyphicons-halflings-regular.woff2
│ │ │ └── js
│ │ │ ├── bootstrap.js
│ │ │ ├── bootstrap.min.js
│ │ │ └── npm.js
│ │ ├── datatables-plugins
│ │ ├── .bower.json
│ │ ├── api
│ │ │ ├── average().js
│ │ │ ├── column().title().js
│ │ │ ├── columns().order().js
│ │ │ ├── fnAddDataAndDisplay.js
│ │ │ ├── fnAddTr.js
│ │ │ ├── fnColumnIndexToVisible.js
│ │ │ ├── fnDataUpdate.js
│ │ │ ├── fnDisplayRow.js
│ │ │ ├── fnDisplayStart.js
│ │ │ ├── fnFakeRowspan.js
│ │ │ ├── fnFilterAll.js
│ │ │ ├── fnFilterClear.js
│ │ │ ├── fnFilterOnReturn.js
│ │ │ ├── fnFindCellRowIndexes.js
│ │ │ ├── fnFindCellRowNodes.js
│ │ │ ├── fnGetAdjacentTr.js
│ │ │ ├── fnGetColumnData.js
│ │ │ ├── fnGetColumnIndex.js
│ │ │ ├── fnGetHiddenNodes.js
│ │ │ ├── fnGetTd.js
│ │ │ ├── fnGetTds.js
│ │ │ ├── fnLengthChange.js
│ │ │ ├── fnMultiFilter.js
│ │ │ ├── fnPagingInfo.js
│ │ │ ├── fnProcessingIndicator.js
│ │ │ ├── fnReloadAjax.js
│ │ │ ├── fnSetFilteringDelay.js
│ │ │ ├── fnSortNeutral.js
│ │ │ ├── fnStandingRedraw.js
│ │ │ ├── fnVisibleToColumnIndex.js
│ │ │ ├── page.jumpToData().js
│ │ │ └── sum().js
│ │ ├── features
│ │ │ ├── alphabetSearch
│ │ │ │ ├── dataTables.alphabetSearch.css
│ │ │ │ ├── dataTables.alphabetSearch.js
│ │ │ │ └── dataTables.alphabetSearch.min.js
│ │ │ ├── lengthLinks
│ │ │ │ ├── dataTables.lengthLinks.css
│ │ │ │ ├── dataTables.lengthLinks.js
│ │ │ │ └── dataTables.lengthLinks.min.js
│ │ │ └── searchHighlight
│ │ │ │ ├── dataTables.searchHighlight.css
│ │ │ │ ├── dataTables.searchHighlight.js
│ │ │ │ └── dataTables.searchHighlight.min.js
│ │ ├── filtering
│ │ │ ├── row-based
│ │ │ │ ├── TableTools.ShowSelectedOnly.js
│ │ │ │ ├── range_dates.js
│ │ │ │ └── range_numbers.js
│ │ │ └── type-based
│ │ │ │ ├── accent-neutralise.js
│ │ │ │ ├── html.js
│ │ │ │ └── phoneNumber.js
│ │ ├── i18n
│ │ │ ├── Afrikaans.lang
│ │ │ ├── Albanian.lang
│ │ │ ├── Arabic.lang
│ │ │ ├── Azerbaijan.lang
│ │ │ ├── Bangla.lang
│ │ │ ├── Belarusian.lang
│ │ │ ├── Bulgarian.lang
│ │ │ ├── Catalan.lang
│ │ │ ├── Chinese-traditional.lang
│ │ │ ├── Chinese.lang
│ │ │ ├── Croatian.lang
│ │ │ ├── Czech.lang
│ │ │ ├── Danish.lang
│ │ │ ├── Dutch.lang
│ │ │ ├── English.lang
│ │ │ ├── Estonian.lang
│ │ │ ├── Filipino.lang
│ │ │ ├── Finnish.lang
│ │ │ ├── French.lang
│ │ │ ├── Galician.lang
│ │ │ ├── Georgian.lang
│ │ │ ├── German.lang
│ │ │ ├── Greek.lang
│ │ │ ├── Gujarati.lang
│ │ │ ├── Hebrew.lang
│ │ │ ├── Hindi.lang
│ │ │ ├── Hungarian.lang
│ │ │ ├── Icelandic.lang
│ │ │ ├── Indonesian-Alternative.lang
│ │ │ ├── Indonesian.lang
│ │ │ ├── Irish.lang
│ │ │ ├── Italian.lang
│ │ │ ├── Japanese.lang
│ │ │ ├── Korean.lang
│ │ │ ├── Latvian.lang
│ │ │ ├── Lithuanian.lang
│ │ │ ├── Macedonian.lang
│ │ │ ├── Malay.lang
│ │ │ ├── Norwegian.lang
│ │ │ ├── Persian.lang
│ │ │ ├── Polish.lang
│ │ │ ├── Portuguese-Brasil.lang
│ │ │ ├── Portuguese.lang
│ │ │ ├── Romanian.lang
│ │ │ ├── Russian.lang
│ │ │ ├── Serbian.lang
│ │ │ ├── Slovak.lang
│ │ │ ├── Slovenian.lang
│ │ │ ├── Spanish.lang
│ │ │ ├── Swahili.lang
│ │ │ ├── Swedish.lang
│ │ │ ├── Tamil.lang
│ │ │ ├── Thai.lang
│ │ │ ├── Turkish.lang
│ │ │ ├── Ukranian.lang
│ │ │ ├── Urdu.lang
│ │ │ ├── Uzbek.lang
│ │ │ └── Vietnamese.lang
│ │ ├── integration
│ │ │ ├── bootstrap
│ │ │ │ ├── 1
│ │ │ │ │ ├── dataTables.bootstrap.css
│ │ │ │ │ └── dataTables.bootstrap.js
│ │ │ │ ├── 2
│ │ │ │ │ ├── dataTables.bootstrap.css
│ │ │ │ │ ├── dataTables.bootstrap.js
│ │ │ │ │ ├── dataTables.bootstrap.min.js
│ │ │ │ │ └── index.html
│ │ │ │ ├── 3
│ │ │ │ │ ├── dataTables.bootstrap.css
│ │ │ │ │ ├── dataTables.bootstrap.js
│ │ │ │ │ ├── dataTables.bootstrap.min.js
│ │ │ │ │ └── index.html
│ │ │ │ └── images
│ │ │ │ │ ├── sort_asc.png
│ │ │ │ │ ├── sort_asc_disabled.png
│ │ │ │ │ ├── sort_both.png
│ │ │ │ │ ├── sort_desc.png
│ │ │ │ │ └── sort_desc_disabled.png
│ │ │ ├── font-awesome
│ │ │ │ └── dataTables.fontAwesome.css
│ │ │ ├── foundation
│ │ │ │ ├── dataTables.foundation.css
│ │ │ │ ├── dataTables.foundation.js
│ │ │ │ ├── dataTables.foundation.min.js
│ │ │ │ └── images
│ │ │ │ │ ├── sort_asc.png
│ │ │ │ │ ├── sort_asc_disabled.png
│ │ │ │ │ ├── sort_both.png
│ │ │ │ │ ├── sort_desc.png
│ │ │ │ │ └── sort_desc_disabled.png
│ │ │ └── jqueryui
│ │ │ │ ├── dataTables.jqueryui.css
│ │ │ │ ├── dataTables.jqueryui.js
│ │ │ │ ├── dataTables.jqueryui.min.js
│ │ │ │ ├── dataTables.jqueryui.scss
│ │ │ │ └── index.html
│ │ ├── pagination
│ │ │ ├── ellipses.js
│ │ │ ├── extjs.js
│ │ │ ├── four_button.js
│ │ │ ├── input.js
│ │ │ ├── jPaginator
│ │ │ │ └── dataTables.jPaginator.js
│ │ │ ├── scrolling.js
│ │ │ └── select.js
│ │ ├── sorting
│ │ │ ├── alt-string.js
│ │ │ ├── anti-the.js
│ │ │ ├── chinese-string.js
│ │ │ ├── currency.js
│ │ │ ├── custom-data-source
│ │ │ │ ├── dom-checkbox.js
│ │ │ │ ├── dom-select.js
│ │ │ │ └── dom-text.js
│ │ │ ├── date-dd-MMM-yyyy.js
│ │ │ ├── date-de.js
│ │ │ ├── date-eu.js
│ │ │ ├── date-euro.js
│ │ │ ├── date-uk.js
│ │ │ ├── datetime-moment.js
│ │ │ ├── datetime-us.js
│ │ │ ├── enum.js
│ │ │ ├── file-size.js
│ │ │ ├── formatted-numbers.js
│ │ │ ├── ip-address.js
│ │ │ ├── monthYear.js
│ │ │ ├── natural.js
│ │ │ ├── num-html.js
│ │ │ ├── numeric-comma.js
│ │ │ ├── percent.js
│ │ │ ├── persian.js
│ │ │ ├── scientific.js
│ │ │ ├── signed-num.js
│ │ │ ├── stringMonthYear.js
│ │ │ ├── time.js
│ │ │ ├── title-numeric.js
│ │ │ ├── title-string.js
│ │ │ └── turkish-string.js
│ │ └── type-detection
│ │ │ ├── currency.js
│ │ │ ├── date-uk.js
│ │ │ ├── file-size.js
│ │ │ ├── formatted-num.js
│ │ │ ├── ip-address.js
│ │ │ ├── num-html.js
│ │ │ └── numeric-comma.js
│ │ ├── datatables-responsive
│ │ ├── .bower.json
│ │ ├── .gitignore
│ │ ├── css
│ │ │ ├── dataTables.responsive.css
│ │ │ ├── responsive.bootstrap.scss
│ │ │ ├── responsive.foundation.scss
│ │ │ └── responsive.jqueryui.scss
│ │ └── js
│ │ │ └── dataTables.responsive.js
│ │ ├── datatables
│ │ ├── .bower.json
│ │ └── media
│ │ │ ├── css
│ │ │ ├── dataTables.bootstrap.css
│ │ │ ├── dataTables.bootstrap.min.css
│ │ │ ├── dataTables.foundation.css
│ │ │ ├── dataTables.foundation.min.css
│ │ │ ├── dataTables.jqueryui.css
│ │ │ ├── dataTables.jqueryui.min.css
│ │ │ ├── jquery.dataTables.css
│ │ │ ├── jquery.dataTables.min.css
│ │ │ └── jquery.dataTables_themeroller.css
│ │ │ ├── images
│ │ │ ├── Sorting icons.psd
│ │ │ ├── favicon.ico
│ │ │ ├── sort_asc.png
│ │ │ ├── sort_asc_disabled.png
│ │ │ ├── sort_both.png
│ │ │ ├── sort_desc.png
│ │ │ └── sort_desc_disabled.png
│ │ │ └── js
│ │ │ ├── dataTables.bootstrap.js
│ │ │ ├── dataTables.bootstrap.min.js
│ │ │ ├── dataTables.foundation.js
│ │ │ ├── dataTables.foundation.min.js
│ │ │ ├── dataTables.jqueryui.js
│ │ │ ├── dataTables.jqueryui.min.js
│ │ │ ├── jquery.dataTables.js
│ │ │ ├── jquery.dataTables.min.js
│ │ │ └── jquery.js
│ │ ├── dist
│ │ ├── css
│ │ │ ├── sb-admin-2.css
│ │ │ └── timeline.css
│ │ └── js
│ │ │ └── sb-admin-2.js
│ │ ├── font-awesome
│ │ ├── .bower.json
│ │ ├── .gitignore
│ │ ├── .npmignore
│ │ ├── css
│ │ │ ├── font-awesome.css
│ │ │ └── font-awesome.min.css
│ │ ├── fonts
│ │ │ ├── FontAwesome.otf
│ │ │ ├── fontawesome-webfont.eot
│ │ │ ├── fontawesome-webfont.svg
│ │ │ ├── fontawesome-webfont.ttf
│ │ │ ├── fontawesome-webfont.woff
│ │ │ └── fontawesome-webfont.woff2
│ │ ├── less
│ │ │ ├── animated.less
│ │ │ ├── bordered-pulled.less
│ │ │ ├── core.less
│ │ │ ├── extras.less
│ │ │ ├── fixed-width.less
│ │ │ ├── font-awesome.less
│ │ │ ├── icons.less
│ │ │ ├── larger.less
│ │ │ ├── list.less
│ │ │ ├── mixins.less
│ │ │ ├── path.less
│ │ │ ├── rotated-flipped.less
│ │ │ ├── screen-reader.less
│ │ │ ├── spinning.less
│ │ │ ├── stacked.less
│ │ │ └── variables.less
│ │ └── scss
│ │ │ ├── _animated.scss
│ │ │ ├── _bordered-pulled.scss
│ │ │ ├── _core.scss
│ │ │ ├── _extras.scss
│ │ │ ├── _fixed-width.scss
│ │ │ ├── _icons.scss
│ │ │ ├── _larger.scss
│ │ │ ├── _list.scss
│ │ │ ├── _mixins.scss
│ │ │ ├── _path.scss
│ │ │ ├── _rotated-flipped.scss
│ │ │ ├── _screen-reader.scss
│ │ │ ├── _spinning.scss
│ │ │ ├── _stacked.scss
│ │ │ ├── _variables.scss
│ │ │ └── font-awesome.scss
│ │ ├── jquery
│ │ ├── .bower.json
│ │ └── dist
│ │ │ ├── jquery.js
│ │ │ ├── jquery.min.js
│ │ │ └── jquery.min.map
│ │ └── metisMenu
│ │ ├── .bower.json
│ │ └── dist
│ │ ├── metisMenu.css
│ │ ├── metisMenu.js
│ │ ├── metisMenu.min.css
│ │ └── metisMenu.min.js
│ └── index.jsp
└── test
└── java
└── com
└── jrbac
├── context
└── BaseReturnTest.java
├── dao
└── LoginUserDaoTest.java
├── service
├── LoginUserServiceTest.java
├── MenuServiceTest.java
└── ZtreeServiceTest.java
├── test
├── BeanCopy.java
├── Hello.java
├── TestAddress.java
└── TestUser.java
└── util
├── DESUtilTest.java
├── HttpUtilTest.java
└── PasswordUtilTest.java
/.gitattributes:
--------------------------------------------------------------------------------
1 | # Auto detect text files and perform LF normalization
2 | * text=auto
3 |
4 | # Custom for Visual Studio
5 | *.cs diff=csharp
6 |
7 | # Standard to msysgit
8 | *.doc diff=astextplain
9 | *.DOC diff=astextplain
10 | *.docx diff=astextplain
11 | *.DOCX diff=astextplain
12 | *.dot diff=astextplain
13 | *.DOT diff=astextplain
14 | *.pdf diff=astextplain
15 | *.PDF diff=astextplain
16 | *.rtf diff=astextplain
17 | *.RTF diff=astextplain
18 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | *.class
2 | .classpath
3 | .project
4 | target
5 | # Mobile Tools for Java (J2ME)
6 | .mtj.tmp/
7 |
8 | # Package Files #
9 | *.jar
10 | *.war
11 | *.ear
12 |
13 | # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
14 | hs_err_pid*
15 |
16 | # =========================
17 | # Operating System Files
18 | # =========================
19 |
20 | # OSX
21 | # =========================
22 |
23 | .DS_Store
24 | .AppleDouble
25 | .LSOverride
26 |
27 | # Thumbnails
28 | ._*
29 |
30 | # Files that might appear on external disk
31 | .Spotlight-V100
32 | .Trashes
33 |
34 | # Directories potentially created on remote AFP share
35 | .AppleDB
36 | .AppleDesktop
37 | Network Trash Folder
38 | Temporary Items
39 | .apdisk
40 |
41 | # Windows
42 | # =========================
43 |
44 | # Windows image file caches
45 | Thumbs.db
46 | ehthumbs.db
47 |
48 | # Folder config file
49 | Desktop.ini
50 |
51 | # Recycle Bin used on file shares
52 | $RECYCLE.BIN/
53 |
54 | # Windows Installer files
55 | *.cab
56 | *.msi
57 | *.msm
58 | *.msp
59 |
60 | # Windows shortcuts
61 | *.lnk
62 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 | java-rbac
3 | ======================
4 | 一个java版本的基于角色的权限管理系统
5 |
6 | 可以用来做公共的cms后台
7 |
8 | [系统介绍与美图](http://blog.csdn.net/frankcheng5143/article/details/51725226)
9 | 该版本支持多级菜单
10 |
11 | 部署方法
12 |
13 | 将
14 | ```
15 | /src/main/resources/sql/jrbac.sql
16 | ```
17 | 数据库脚本运行在本地数据库
18 |
19 | 将
20 | ```
21 | src/main/resources/jdbc.properties
22 | ```
23 | 中
24 | ```
25 | jdbc.username=root
26 | jdbc.password=cheng
27 | ```
28 | 设置成自己的数据库用户名和密码
29 |
30 | 然后运行项目(注意这是一个maven项目)
31 |
32 | 确保你的eclispe配置好了maven
33 |
34 | Eclipse 导入
35 |
36 | File --> Import -->选择Maven --> Existing Maven Projects
37 |
38 | 访问地址:http://127.0.0.1:8080/jrbac
39 |
40 | 初始化登录用户名chenggaowei
41 |
42 | 登录密码12345678
43 |
--------------------------------------------------------------------------------
/jrbac/.externalToolBuilders/org.eclipse.wst.jsdt.core.javascriptValidator (1).launch:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/jrbac/.settings/.jsdtscope:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/jrbac/.settings/org.eclipse.core.resources.prefs:
--------------------------------------------------------------------------------
1 | eclipse.preferences.version=1
2 | encoding/=UTF-8
3 |
--------------------------------------------------------------------------------
/jrbac/.settings/org.eclipse.jdt.core.prefs:
--------------------------------------------------------------------------------
1 | eclipse.preferences.version=1
2 | org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
3 | org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
4 | org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
5 | org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
6 | org.eclipse.jdt.core.compiler.compliance=1.7
7 | org.eclipse.jdt.core.compiler.debug.lineNumber=generate
8 | org.eclipse.jdt.core.compiler.debug.localVariable=generate
9 | org.eclipse.jdt.core.compiler.debug.sourceFile=generate
10 | org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
11 | org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
12 | org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
13 | org.eclipse.jdt.core.compiler.source=1.7
14 |
--------------------------------------------------------------------------------
/jrbac/.settings/org.eclipse.jst.j2ee.ejb.annotations.xdoclet.prefs:
--------------------------------------------------------------------------------
1 | XDOCLETBUILDERACTIVE=true
2 | XDOCLETHOME=
3 | XDOCLETUSEGLOBAL=true
4 | XDOCLETVERSION=1.2.1
5 | eclipse.preferences.version=1
6 |
--------------------------------------------------------------------------------
/jrbac/.settings/org.eclipse.ltk.core.refactoring.prefs:
--------------------------------------------------------------------------------
1 | eclipse.preferences.version=1
2 | org.eclipse.ltk.core.refactoring.enable.project.refactoring.history=false
3 |
--------------------------------------------------------------------------------
/jrbac/.settings/org.eclipse.m2e.core.prefs:
--------------------------------------------------------------------------------
1 | activeProfiles=
2 | eclipse.preferences.version=1
3 | resolveWorkspaceProjects=true
4 | version=1
5 |
--------------------------------------------------------------------------------
/jrbac/.settings/org.eclipse.wst.common.component:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/jrbac/.settings/org.eclipse.wst.common.project.facet.core.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/jrbac/.settings/org.eclipse.wst.html.core.prefs:
--------------------------------------------------------------------------------
1 | document-type/=
2 | eclipse.preferences.version=1
3 |
--------------------------------------------------------------------------------
/jrbac/.settings/org.eclipse.wst.jsdt.ui.superType.container:
--------------------------------------------------------------------------------
1 | org.eclipse.wst.jsdt.launching.baseBrowserLibrary
--------------------------------------------------------------------------------
/jrbac/.settings/org.eclipse.wst.jsdt.ui.superType.name:
--------------------------------------------------------------------------------
1 | Window
--------------------------------------------------------------------------------
/jrbac/.settings/org.eclipse.wst.validation.prefs:
--------------------------------------------------------------------------------
1 | disabled=06target
2 | eclipse.preferences.version=1
3 |
--------------------------------------------------------------------------------
/jrbac/.settings/org.eclipse.wst.ws.service.policy.prefs:
--------------------------------------------------------------------------------
1 | eclipse.preferences.version=1
2 | org.eclipse.wst.ws.service.policy.projectEnabled=false
3 |
--------------------------------------------------------------------------------
/jrbac/src/main/java/com/jrbac/context/ErrorCode.java:
--------------------------------------------------------------------------------
1 | package com.jrbac.context;
2 |
3 | /**
4 | * 错误返回码
5 | * @author 程高伟
6 | * @date 2016年11月11日 下午10:36:21
7 | */
8 | public enum ErrorCode {
9 | SUCCESS("0","success"),
10 | FAILURE("1","failure"),
11 | RECORD_NULL("10000","record is null"),
12 | SERVER_BUSY("-1","server is busy, please try later"),
13 | INTERNAL_ERROR("-2","server internal error"),
14 | PARAM_ERROR("-3","param error"),
15 | UNSUPPORTED_TYPE("-4","unsupported type"),
16 | NOT_LOGGIN("41000","not login"),
17 | USER_FROZEN("41001","user was frozen"),
18 | NOT_AUTHORIZED("42000","not authorized"),
19 | JSON_ERROR("47001","JSON/XML parse error"),
20 | PERMISSION_DENIED("004","permission denied");
21 | private String code; //error code
22 | private String message; //error message
23 | private ErrorCode(String code,String message){
24 | this.code = code;
25 | this.message = message;
26 | }
27 | public String getCode() {
28 | return code;
29 | }
30 | public void setCode(String code) {
31 | this.code = code;
32 | }
33 | public String getMessage() {
34 | return message;
35 | }
36 | public void setMessage(String message) {
37 | this.message = message;
38 | }
39 |
40 | }
41 |
--------------------------------------------------------------------------------
/jrbac/src/main/java/com/jrbac/context/GeetConfig.java:
--------------------------------------------------------------------------------
1 | package com.jrbac.context;
2 |
3 | /**
4 | * 验证码配置文件
5 | *
6 | *
7 | */
8 | public class GeetConfig {
9 |
10 | // 填入自己的captcha_id和private_key
11 | private static final String captcha_id = "84fd748e0aae022ef5d727e5e5120425";
12 | private static final String private_key = "abc36eef9a53fa4f557436da3eb991e3";
13 |
14 | public static final String getCaptcha_id() {
15 | return captcha_id;
16 | }
17 |
18 | public static final String getPrivate_key() {
19 | return private_key;
20 | }
21 |
22 | }
23 |
--------------------------------------------------------------------------------
/jrbac/src/main/java/com/jrbac/context/Param.java:
--------------------------------------------------------------------------------
1 | package com.jrbac.context;
2 |
3 | /**
4 | * 系统参数和session参数
5 | *
6 | * @author 程高伟
7 | * @date 2016年11月14日 上午10:43:44
8 | */
9 | public interface Param {
10 |
11 | /**
12 | * 滑动验证码session中userid的key
13 | */
14 | String SESSION_GEET_USERID = "geetUserid";
15 |
16 | /**
17 | * 登录页面session中对数据进行des加密的key
18 | */
19 | String SESSION_LOGIN_DES_KEY = "loginDesKey";
20 |
21 | /**
22 | * 登录用户在session中的key
23 | */
24 | String SESSION_LOGIN_USER = "loginUser";
25 |
26 | /**
27 | * 登录用户所具有的菜单在session中的key
28 | */
29 | String SESSION_USER_MENU = "userMenuList";
30 |
31 | /**
32 | * ckfinder用户在session中的key
33 | */
34 | String SESSION_CKFINDER_USERROLE = "CKFinder_UserRole";
35 |
36 | /**
37 | * 管理员在修改菜单的时候session中的key
38 | */
39 | String MENU_LIST = "menuList";
40 | /**
41 | * 管理员在修改角色的时候session中的key
42 | */
43 | String Role_LIST = "roleList";
44 | /**
45 | * 管理员在修改用户的时候session中的key
46 | */
47 | String USER_LIST = "userList";
48 |
49 | }
50 |
--------------------------------------------------------------------------------
/jrbac/src/main/java/com/jrbac/context/Progress.java:
--------------------------------------------------------------------------------
1 | package com.jrbac.context;
2 |
3 | /**
4 | * 进度条
5 | *
6 | * @author 程高伟
7 | * @date 2016年11月16日 下午2:47:17
8 | */
9 | public class Progress {
10 | private long bytesRead;
11 | private long contentLength;
12 | private long items;
13 |
14 | public long getBytesRead() {
15 | return bytesRead;
16 | }
17 |
18 | public void setBytesRead(long bytesRead) {
19 | this.bytesRead = bytesRead;
20 | }
21 |
22 | public long getContentLength() {
23 | return contentLength;
24 | }
25 |
26 | public void setContentLength(long contentLength) {
27 | this.contentLength = contentLength;
28 | }
29 |
30 | public long getItems() {
31 | return items;
32 | }
33 |
34 | public void setItems(long items) {
35 | this.items = items;
36 | }
37 |
38 | @Override
39 | public String toString() {
40 | return "Progress [bytesRead=" + bytesRead + ", contentLength=" + contentLength + ", items=" + items + "]";
41 | }
42 |
43 | }
--------------------------------------------------------------------------------
/jrbac/src/main/java/com/jrbac/context/SessionParam.java:
--------------------------------------------------------------------------------
1 | package com.jrbac.context;
2 |
3 | /**
4 | * session中存在的参数
5 | *
6 | * @author 程高伟
7 | *
8 | * @date 2016年10月24日 下午4:47:21
9 | */
10 | public interface SessionParam {
11 |
12 | /**
13 | * 滑动验证码 sessionid
14 | */
15 | String GEET_USERID = "geetUserid";
16 |
17 | /**
18 | * 登录页面的key
19 | */
20 | String LOGIN_KEY = "loginKey";
21 |
22 | /**
23 | * 登录用户在session中的key
24 | */
25 | String LOGIN_USER = "loginUser";
26 |
27 | /**
28 | * 登录用户所具有的菜单在session中的key
29 | */
30 | String USER_MENU = "userMenuList";
31 |
32 | /**
33 | * 管理员在修改菜单的时候session中的key
34 | */
35 | String MENU_LIST = "menuList";
36 |
37 | /**
38 | * ckfinder用户在session中的key
39 | */
40 | String CKFINDER_USERROLE = "CKFinder_UserRole";
41 |
42 | }
43 |
--------------------------------------------------------------------------------
/jrbac/src/main/java/com/jrbac/controller/admin/HomeController.java:
--------------------------------------------------------------------------------
1 | package com.jrbac.controller.admin;
2 |
3 | import org.slf4j.Logger;
4 | import org.slf4j.LoggerFactory;
5 | import org.springframework.stereotype.Controller;
6 | import org.springframework.ui.Model;
7 | import org.springframework.web.bind.annotation.RequestMapping;
8 | import org.springframework.web.bind.annotation.RequestMethod;
9 |
10 | /**
11 | * 后台首页
12 | *
13 | * @author 程高伟
14 | *
15 | * @date 2016年10月26日 下午5:40:54
16 | */
17 |
18 | @Controller
19 | @RequestMapping(value = "/admin/home")
20 | public class HomeController {
21 | private final Logger logger = LoggerFactory.getLogger(this.getClass());
22 |
23 | @RequestMapping(value = "/index.html", method = RequestMethod.GET)
24 | public String index(Model model) {
25 | logger.debug("-----后台首页-----");
26 | model.addAttribute("title", "后台首页");
27 | return "admin/home/index";
28 | }
29 |
30 | }
31 |
--------------------------------------------------------------------------------
/jrbac/src/main/java/com/jrbac/dao/MenuDao.java:
--------------------------------------------------------------------------------
1 | package com.jrbac.dao;
2 |
3 | import java.util.List;
4 |
5 | import org.apache.ibatis.annotations.Param;
6 |
7 | import com.jrbac.entity.LoginUser;
8 | import com.jrbac.entity.Menu;
9 |
10 | public interface MenuDao {
11 |
12 | /**
13 | * 查找用户所拥有的所有菜单
14 | *
15 | * @param user
16 | * @return
17 | */
18 | public List