steam十大最好玩游戏离线登录选项没了怎么.求各位大佬解惑,在线等

TA的最新馆藏[转]&[转]&[转]&[转]&[转]&[转]&&& &文章主题:
交流经验:1061
总积分:389
级别:普通会员
Authorization概述
& 授权,又称作为访问控制,是对资源的访问管理的过程。换句话说,控制谁有权限在应用程序中做什么。
& 授权检查的例子是:该用户是否被允许访问这个网页,编辑此数据,查看此按钮,或打印到这台打印机?这些都是决定哪些是用户能够访问的。
n授权的三要素
& 授权有着三个核心元素:权限、角色和用户 。
& 我们需要在应用程序中对用户和权限建立关联,通常的做法就是将权限分配给某个角色,然后将这个角色关联一个或多个用户。
& 是Shiro安全机制最核心的元素。它在应用程序中明确声明了被允许的行为和表现。一个格式良好的权限声明可以清晰表达出用户对该资源拥有的权限。
n权限声明和粒度
& 在shiro中主要通过前面学过的通配符表达式来完成。
& 角色是一个命名的实体,通常代表一组行为或职责。这些行为演化为你在一个软件应用中能或者不能做的事情。角色通常是分配给用户帐户的,因此,通过分配,用户能够“做”的事情可以归属于各种角色。
nShiro支持的角色类型
1:隐式角色:一个角色代表着一系列的操作,当需要对某一操作进行授权验证时,只需判断是否是该角色即可。这种角色权限相对简单、模糊,不利于扩展。
2:显式角色:一个角色拥有一个权限的集合。授权验证时,需要判断当前角色是否拥有该权限。这种角色权限可以对该角色进行详细的权限描述,适合更复杂的权限设计。 Shiro官方推荐使用这种方式。
nShiro的三种授权方式
1:编写代码——在Java 代码中用像if 和else 块的结构执行授权检查。
2:JDK 的注解——你可以添加授权注解给你的Java 方法。
3:JSP/GSP 标签库——你可以控制基于角色和权限的JSP 或者GSP 页面输出。
n通过使用subject的方法来实现角色的判断,常见的api:
hasRole(String roleName) :返回true 如果Subject 被分配了指定的角色
hasRoles(List&String& roleNames) :返回一个与方法参数中目录一致的hasRole 结果的数组。
hasAllRoles(Collection&String& roleNames):返回true 如果Subject 被分配了所有的角色
& Shiro还支持以断言的方式进行授权验证。断言成功,不返回任何值,程序继续执行;断言失败时,将抛出异常信息。方法大致如下:
checkRole(String roleName) 、checkRoles(Collection&String&roleNames)、checkRoles(String… roleNames)
n基于权限对象的实现
Permission printPermission = new PrinterPermission(&laser400n&, &print&);
相关方法:isPermitted(Permission p)、isPermitted(List&Permission& perms)、isPermittedAll(Collection&Permission& perms)&&
n基于字符串的实现
if (currentUser.isPermitted(&printer:print:laserjet4400n&))
相关方法:isPermitted(String perm)、isPermitted(String... perms)、isPermittedAll(String... perms)
n当然上述权限的实现也都可以采用断言的方式
& 相关方法:
checkPermission(Permission p)
checkPermission(String perm)
checkPermissions(Collection&Permission& perms)
checkPermissions(String... perms)
基于注解的授权
n需要有AOP框架的支持,这里选择spring,先看看怎么集成配置,看例子:
&?xml version=&1.0& encoding=&UTF-8&?&
&beans xmlns=&http://www.springframework.org/schema/beans&
& xmlns:xsi=&http://www.w3.org/2001/XMLSchema-instance&
& xmlns:context=&http://www.springframework.org/schema/context&
& xmlns:aop=&http://www.springframework.org/schema/aop&
& xmlns:tx=&http://www.springframework.org/schema/tx&
& xsi:schemaLocation=&
& http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
& http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
& http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
& http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd&&
& &&& &aop:aspectj-autoproxy&&/aop:aspectj-autoproxy&
& &&& &context:component-scan base-package=&cn.javass&&&/context:component-scan&& &&&
& &&& &bean class=&org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator&
& depends-on=&lifecycleBeanPostProcessor& &
& &property name=&proxyTargetClass& value=&true&/&
& &bean id=&lifecycleBeanPostProcessor& class=&org.apache.shiro.spring.LifecycleBeanPostProcessor&/&
&&&bean class=&org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor&&
& &property name=&securityManager& ref=&securityManager& /&
& &bean class=&org.springframework.beans.factory.config.MethodInvokingFactoryBean&&
& &property name=&staticMethod& value=&org.apache.shiro.SecurityUtils.setSecurityManager&/&
& &property name=&arguments& ref=&securityManager&/&
&&& & &bean id=&securityManager& class=&org.apache.shiro.mgt.DefaultSecurityManager&&&
& &&& &property name=&cacheManager& ref=&cacheManager&/&&
& &&&&&&& &property name=&realm& ref=&myRealm&/&&
& &&&&&&& &property name=&sessionManager& ref=&sessionManager&/&&&
& &bean id=&sessionManager& class=&org.apache.shiro.session.mgt.DefaultSessionManager&&
& &bean id=&cacheManager& class=&org.apache.shiro.cache.ehcache.EhCacheManager& /&
& &bean id=&myRealm& class=&org.apache.shiro.realm.text.IniRealm&&
& &property name=&resourcePath& value=&D:/wp/src/TestShiro.ini&&&/property&&
n测试用的HelloAnno
public class HelloAnno {
& @Autowired
& private org.apache.shiro.mgt.SecurityManager sm =
& @RequiresAuthentication
& @RequiresPermissions({&p1&})
& public void t(){
& System.out.println(&ok=========&);
& public void login(){
& UsernamePasswordToken token = new UsernamePasswordToken(&javass&,&cc&);&
& token.setRememberMe(true);
& SecurityUtils.setSecurityManager(sm);
& Subject currentUser = SecurityUtils.getSubject();&
& currentUser.login(token);
& public static void main(String[] args) {
& &ApplicationContext ctx = new ClassPathXmlApplicationContext(&applicationContext.xml&);
& &HelloAnno t = (HelloAnno)ctx.getBean(&helloAnno&);&
& &t.login();
nShiro提供的注解
1:@RequiresAuthentication :要求当前Subject 已经在当前的session 中被验证通过才能被注解的类/实例/方法访问或调用。
2:@RequiresGuest :要求当前的Subject 是一个“guest”,也就是他们必须是在之前的session中没有被验证或记住才能被注解的类/实例/方法访问或调用。
3:@RequiresPermissions:要求当前的Subject 被允许一个或多个权限,以便执行注解的方法,比如:@RequiresPermissions(&account:create&)
4:@RequiresRoles:要求当前的Subject 拥有所有指定的角色。如果他们没有,则该方法将不会被执行,而且AuthorizationException 异常将会被抛出。比如:@RequiresRoles(&administrator&)
5:@RequiresUser:需要当前的Subject 是一个应用程序用户才能被注解的类/实例/方法访问或调用。要么是通过验证被确认,或者在之前session 中的'RememberMe'服务被记住。
授权的顺序
nStep 1:应用程序或框架代码调用任何Subject的hasRole*, checkRole*, isPermitted*,或者checkPermission*方法的变体,传递任何所需的权限或角色
nStep 2:Subject的实例,通常是DelegatingSubject(或子类)代表应用程序的SecurityManager 通过调用securityManager的几乎各自相同的方法。
nStep 3:SecurityManager,实现org.apache.shiro.authz.Authorizer 接口,他定义了所有Subject 具体的授权方法 。默认情况下,authorizer 实例是一个ModularRealmAuthorizer 实例,它支持协调任何授权操作过程中的一个或多个Realm 实例。
nStep 4:每个配置好的Realm 被检查是否实现了相同的Authorizer接口。如果是,Realm 各自的hasRole*, checkRole*,isPermitted*,或checkPermission*方法将被调用。
理解ModularRealmAuthorizer
nModularRealmAuthorizer 将遍历其内部的Realm 集合,并按迭代顺序与每一个进行交互。每个Realm 的交互功能如下:
1:如果Realm 自己实现了Authorizer 接口,它的各个Authorizer方法将被调用。
(1)如果Realm 的方法导致异常,该异常将会以AuthorizationException 的形式传递给调用者。这将短路授权过程,任何剩余的Realm 将不会被访问
(2)如果该Realm 的方法是一个返回布尔值的hasRole*或者isPermitted*的变体,并且该返回值为true,真值将会立即被返回,同时任何剩余的Realm 都将被短路,这种行为能提高性能。
2:如果Realm 不实现Authorizer 接口,它会被忽略
了解全局的PermissionResolver
n当执行基于字符串的权限检查是,大多数Shiro 的默认Realm 实现首先将该字符串转换成一个实际的Permission 实例,用的是内部默认实现的WildcardPermissionResolver
n如果你想要支持自己的权限字符串语法,而且你想要所有配置的Realm 实例支持该语法,你可以将你的PermissionResolver 设置为全局的
n如果你想配置一个全局的PermissionResolver,每个用来接收配置的PermissionResolver 的Realm 必须实现PermissionResolverAware 接口。这样保证了配置的实例能够被每个支持该配置的Realm 转发。
n类似的,还有全局的RolePermissionResolver,但请注意:由于这种转换角色名到权限的概念非常特定于应用程序,Shiro 默认Realm 的实现并不使用它们
原创,转载请注明
这篇文章被编辑了 1 次. 最近一次更新是在
精品视频课程推荐
创建规范的XML文档,DTD的作用,并且可以根据要求创建私用的DTD,通过JavaScript解析XML DOM
本视频课程是北京Java私塾原创精品书籍《研磨设计模式》一书的配套学习视频,由《研磨设计模式》的第一作者CC录制
课程目标:全面、系统的掌握GoF设计模式的知识,达到可以在实际项目开发中运用的能力
技术要点:如何实现可配置、如何实现缓存以及缓存的管理、如何实现用缓存来控制多实例的创建、如何实现参数化工厂、 如何实现可扩展工厂、如何实现原型管理器、如何实现Java的静态代理和动态代理、如何实现多线程处理队列请求、 如何实现命令的参数化配置、可撤销的操作、宏命令、队列请求和日志请求、如何实现翻页迭代、如何检测环状结构、 如何实现通用的增删改查、如何模拟工作流来处理流程、如何实现简单又通用的XML读取、如何实现模拟AOP的功能......
系统、完整的学习Spring Data JPA开发的知识。包括:Spring Data JPA入门;JpaRepository基本功能 ;JpaRepository的查询;客户化扩展JpaRepository;Specifications查询。
达到能综合使用Struts2+Spring3+Hibernate3+Jbpm4来进行实际项目开发的能力。
包括:ssh和jbpm的整合;数据字典;通用DAO(Spring+Hibernate+泛型+反射+SpEL+模板方法模式);自动生成UUID的加强版;分层开发、SSH联合的基本开发;翻页的示范真实值和表现值,数据参照的实现;文件上传下载;主子表操;登录验证码;登录控制的拦截器
深入浅出的讲解JavaBen的写法、JavaBean的用法、JavaBean的实现机制、JavaBean对应翻译的代码理解。
选择一个版面
软件设计专版
Web前端技术
学习问题讨论
面试、就业
版权所有 Copyright(C) 私塾在线学习网Shiro的注解授权不起作用-学网-中国IT综合门户网站-提供健康,养生,留学,移民,创业,汽车等信息
Shiro的注解授权不起作用
来源:互联网 更新时间: 12:36:41 责任编辑:鲁晓倩字体:
有用户碰到这样的问题:Shiro的注解授权不起作用,具体问题如下:
这是我的controller
package com.ivo.
import javax.annotation.R
import org.apache.shiro.SecurityU
import org.apache.shiro.authc.AuthenticationE
import org.apache.shiro.authc.UsernamePasswordT
import org.apache.shiro.authz.annotation.RequiresP
import org.apache.shiro.subject.S
import org.springframework.stereotype.C
import org.springframework.web.bind.annotation.RequestM
import com.ivo.model.U
import com.ivo.service.UserS
@Controller
@RequestMapping(value="/user")
public class LoginController {
@Resource(name="userService")
private UserService userS
@RequestMapping(value="/check")
public String findUser(User user){
Subject subject = SecurityUtils.getSubject();
System.out.println("权限:"+subject.isPermitted("Q8"));
Session session = subject.getSession();
UsernamePasswordToken token = new UsernamePasswordToken(user.getUserid(),user.getPassword());
token.setRememberMe(true);
subject.login(token);//跳到realm
session.setTimeout(100);
return "main";
}catch (AuthenticationException e) {
token.clear();
return "register";
@RequestMapping(value="/register")
public String register(){
return "register";
@RequiresPermissions("Q8")
@RequestMapping(value="/master")
//注解授权在这里
public String master(){
return "master";
@RequestMapping(value="/logout")
public String exit(){
Subject subject = SecurityUtils.getSubject();
System.out.println("SessionID:"+subject.getSession().getId());
if(subject.getSession()==null){
System.out.println("没有Session");
System.out.println("有Session");
SecurityUtils.getSubject().logout();
return "register";
相关文章:
上一篇文章:下一篇文章:
最新添加资讯
24小时热门资讯
Copyright © 2004- All Rights Reserved. 学网 版权所有
京ICP备号-1 京公网安备02号Spring整合Shiro做权限控制模块详细案例分析 - 推酷
Spring整合Shiro做权限控制模块详细案例分析
1.引入Shiro的Maven依赖
&!-- Spring 整合Shiro需要的依赖 --&
&dependency&
&groupId&org.apache.shiro&/groupId&
&artifactId&shiro-core&/artifactId&
&version&1.2.1&/version&
&/dependency&
&dependency&
&groupId&org.apache.shiro&/groupId&
&artifactId&shiro-web&/artifactId&
&version&1.2.1&/version&
&/dependency&
&dependency&
&groupId&org.apache.shiro&/groupId&
&artifactId&shiro-ehcache&/artifactId&
&version&1.2.1&/version&
&/dependency&
&dependency&
&groupId&org.apache.shiro&/groupId&
&artifactId&shiro-spring&/artifactId&
&version&1.2.1&/version&
&/dependency&
&!-- 除此之外还有一些东西也不可少spring, spring-mvc, ibatis等 spring.3.1.2 spring-mvc.3.1.2
ibatis.2.3.4 cglib.2.2 --&
2.web.xml中配置
&!-- 配置shiro的核心拦截器 --&
&filter-name&shiroFilter&/filter-name&
&filter-class&org.springframework.web.filter.DelegatingFilterProxy&/filter-class&
&filter-mapping&
&filter-name&shiroFilter&/filter-name&
&url-pattern&/*&/url-pattern&
&/filter-mapping&
3. & &编写自己的UserRealm类继承自Realm,主要实现认证和授权的管理操作
package com.jay.demo.
import java.util.HashS
import java.util.I
import java.util.S
import org.apache.shiro.authc.AuthenticationE
import org.apache.shiro.authc.AuthenticationI
import org.apache.shiro.authc.AuthenticationT
import org.apache.shiro.authc.LockedAccountE
import org.apache.shiro.authc.SimpleAuthenticationI
import org.apache.shiro.authc.UnknownAccountE
import org.apache.shiro.authz.AuthorizationI
import org.apache.shiro.authz.SimpleAuthorizationI
import org.apache.shiro.realm.AuthorizingR
import org.apache.shiro.subject.PrincipalC
import org.springframework.beans.factory.annotation.A
import com.jay.demo.bean.P
import com.jay.demo.bean.R
import com.jay.demo.bean.U
import com.jay.demo.service.UserS
public class UserRealm extends AuthorizingRealm{
@Autowired
private UserService userS
* 授权操作
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
String username = (String) getAvailablePrincipal(principals);
String username = (String) principals.getPrimaryPrincipal();
Set&Role& roleSet =
userService.findUserByUsername(username).getRoleSet();
//角色名的集合
Set&String& roles = new HashSet&String&();
//权限名的集合
Set&String& permissions = new HashSet&String&();
Iterator&Role& it = roleSet.iterator();
while(it.hasNext()){
roles.add(it.next().getName());
for(Permission per:it.next().getPermissionSet()){
permissions.add(per.getName());
SimpleAuthorizationInfo authorizationInfo = new SimpleAuthorizationInfo();
authorizationInfo.addRoles(roles);
authorizationInfo.addStringPermissions(permissions);
return authorizationI
* 身份验证操作
protected AuthenticationInfo doGetAuthenticationInfo(
AuthenticationToken token) throws AuthenticationException {
String username = (String) token.getPrincipal();
User user = userService.findUserByUsername(username);
if(user==null){
//木有找到用户
throw new UnknownAccountException(&没有找到该账号&);
/* if(Boolean.TRUE.equals(user.getLocked())) {
throw new LockedAccountException(); //帐号锁定
* 交给AuthenticatingRealm使用CredentialsMatcher进行密码匹配,如果觉得人家的不好可以在此判断或自定义实现
SimpleAuthenticationInfo info = new SimpleAuthenticationInfo(user.getUsername(), user.getPassword(),getName());
public String getName() {
return getClass().getName();
4.在Spring的applicationContext.xml中进行Shiro的相关配置
1、添加shiroFilter定义&
&!--&Shiro&Filter&--& &&
& bean & id = &shiroFilter& & class = &org.apache.shiro.spring.web.ShiroFilterFactoryBean& & &&
&&&& & property & name = &securityManager& & ref = &securityManager& & /& &&
&&&& & property & name = &loginUrl& & value = &/login& & /& &&
&&&& & property & name = &successUrl& & value = &/user/list& & /& &&
&&&& & property & name = &unauthorizedUrl& & value = &/login& & /& &&
&&&& & property & name = &filterChainDefinitions& & &&
&&&&&&&& & value & &&
&&&&&&&&&&&&/ login &=& anon &&
&&&&&&&&&&&&/user/**&=&authc&&
&&&&&&&&&&&&/role/edit/*&=&perms[role:edit]&&
&&&&&&&&&&&&/role/ save &=& perms [role:edit]&&
&&&&&&&&&&&&/role/ list &=& perms [role:view]&&
&&&&&&&&&&&&/**&=&authc&&
&&&&&&&& &/ value & &&
&&&& &/ property & &&
&/ bean & &&
2、添加securityManager定义&
& bean & id = &securityManager& & class = &org.apache.shiro.web.mgt.DefaultWebSecurityManager& & &&
&&&& & property & name = &realm& & ref = &myRealm& & /& &&
&/ bean & &&
3、添加realm定义&
& bean & id = &&myRealm& & class = &com.jay.demo.shiro.
UserRealm&span class=&attribute-value& style=&font-size: 1 font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', Consolas, 'Courier New', background-color: rgb(250, 250, 250);&&&&/span&&span style=&color: font-size: 1 font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', Consolas, 'Courier New', background-color: rgb(250, 250, 250);&& &/span&&span class=&tag& style=&font-size: 1 font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', Consolas, 'Courier New', color: rgb(0, 102, 153); font-weight: background-color: rgb(250, 250, 250);&&/&&/span&&span style=&color: font-size: 1 font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', Consolas, 'Courier New', background-color: rgb(250, 250, 250);&&
4、配置EhCache
& bean & id = &cacheManager& & class = &org.apache.shiro.cache.ehcache.EhCacheManager& & /&
5、 保证实现了Shiro内部lifecycle函数的bean执行
class=&org.apache.shiro.spring.LifecycleBeanPostProcessor&/&
特别注意:
如果使用Shiro相关的注解,需要在springmvc-servlet.xml中配置一下信息
depends-on=&lifecycleBeanPostProcessor&/&
ref=&securityManager&/&
备注:Shiro权限管理的过滤器解释:
默认过滤器(10个)
anon -- org.apache.shiro.web.filter.authc.AnonymousFilter
authc -- org.apache.shiro.web.filter.authc.FormAuthenticationFilter
authcBasic -- org.apache.shiro.web.filter.authc.BasicHttpAuthenticationFilter
perms -- org.apache.shiro.web.filter.authz.PermissionsAuthorizationFilter
port -- org.apache.shiro.web.filter.authz.PortFilter
rest -- org.apache.shiro.web.filter.authz.HttpMethodPermissionFilter
roles -- org.apache.shiro.web.filter.authz.RolesAuthorizationFilter
ssl -- org.apache.shiro.web.filter.authz.SslFilter
user -- org.apache.shiro.web.filter.authc.UserFilter
logout -- org.apache.shiro.web.filter.authc.LogoutFilter
anon:例子/admins/**=anon 没有参数,表示可以匿名使用。
authc:例如/admins/user/**=authc表示需要认证(登录)才能使用,没有参数
roles:例子/admins/user/**=roles[admin],参数可以写多个,多个时必须加上引号,并且参数之间用逗号分割,当有多个参数时,例如admins/user/**=roles[&admin,guest&],每个参数通过才算通过,相当于hasAllRoles()方法。
perms:例子/admins/user/**=perms[user:add:*],参数可以写多个,多个时必须加上引号,并且参数之间用逗号分割,例如/admins/user/**=perms[&user:add:*,user:modify:*&],当有多个参数时必须每个参数都通过才通过,想当于isPermitedAll()方法。
rest:例子/admins/user/**=rest[user],根据请求的方法,相当于/admins/user/**=perms[user:method] ,其中method为post,get,delete等。
port:例子/admins/user/**=port[8081],当请求的url的端口不是8081是跳转到schemal://serverName:8081?queryString,其中schmal是协议http或https等,serverName是你访问的host,8081是url配置里port的端口,queryString是你访问的url里的?后面的参数。
authcBasic:例如/admins/user/**=authcBasic没有参数表示httpBasic认证
ssl:例子/admins/user/**=ssl没有参数,表示安全的url请求,协议为https
user:例如/admins/user/**=user没有参数表示必须存在用户,当登入操作时不做检查
关于Shiro的标签应用:
&shiro:authenticated& 登录之后
&shiro:notAuthenticated& 不在登录状态时
&shiro:guest& 用户在没有RememberMe时
&shiro:user& 用户在RememberMe时
&shiro:hasAnyRoles name=&abc,123& & 在有abc或者123角色时
&shiro:hasRole name=&abc&& 拥有角色abc
&shiro:lacksRole name=&abc&& 没有角色abc
&shiro:hasPermission name=&abc&& 拥有权限abc
&shiro:lacksPermission name=&abc&& 没有权限abc
&shiro:principal& 显示用户登录名
以上是Shiro的相关配置,出于安全的考虑,一般都会使用ACL(基于角色的用户权限管理去控制用户登录后的权限)
ACL详细代码案例如下:
涉及到的表:3+2(User,Role,Permission &+ &user-role,role-permission)
3张实体表+2张关系表
1.关于User类:
package com.jay.demo.
import java.util.HashS
import java.util.S
public class User {
private Set&Role& roleSet = new HashSet&Role&();
public User() {
public String getId() {
public void setId(String id) {
public String getUsername() {
public void setUsername(String username) {
this.username =
public String getPassword() {
public void setPassword(String password) {
this.password =
public Set&Role& getRoleSet() {
return roleS
public void setRoleSet(Set&Role& roleSet) {
this.roleSet = roleS
2.关于Role表
package com.jay.demo.
import java.io.S
import java.util.HashS
import java.util.S
public class Role implements Serializable {
private static final long serialVersionUID = -9954399L;
private Set&Permission& permissionSet = new HashSet&Permission&();
public Role() {
// --------------------------------------------------------------------------------
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((id == null) ? 0 : id.hashCode());
public boolean equals(Object obj) {
if (this == obj)
if (obj == null)
if (getClass() != obj.getClass())
Role other = (Role)
if (id == null) {
if (other.id != null)
} else if (!id.equals(other.id))
// --------------------------------------------------------------------------------
public Integer getId() {
public void setId(Integer id) {
public String getName() {
public void setName(String name) {
this.name =
public Set&Permission& getPermissionSet() {
return permissionS
public void setPermissionSet(Set&Permission& permissionSet) {
this.permissionSet = permissionS
3.关于permission表
&pre name=&code& class=&java&&package com.jay.demo.
import java.io.S
public class Permission implements Serializable {
private static final long serialVersionUID = -2680802L;
public Permission() {
// --------------------------------------------------------------------------------------
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((id == null) ? 0 : id.hashCode());
public boolean equals(Object obj) {
if (this == obj)
if (obj == null)
if (getClass() != obj.getClass())
Permission other = (Permission)
if (id == null) {
if (other.id != null)
} else if (!id.equals(other.id))
// --------------------------------------------------------------------------------------
public Integer getId() {
public void setId(Integer id) {
public String getName() {
public void setName(String name) {
this.name =
4.dao层接口
package com.jay.demo.
import com.jay.demo.bean.U
public interface UserDao {
User findUserByUsername(String username);
4.使用Mybatis完成的Dao层实现
&?xml version=&1.0& encoding=&UTF-8& ?&
&!DOCTYPE mapper PUBLIC &-//mybatis.org//DTD Mapper 3.0//EN& &http://mybatis.org/dtd/mybatis-3-mapper.dtd& &
&mapper namespace=&com.jay.demo.dao.UserDao&&
&resultMap id=&userMap& type=&com.jay.demo.bean.User&&
&id property=&id& column=&USER_ID&/&
&result property=&username& column=&USER_USERNAME&/&
&result property=&password& column=&USER_PASSWORD&/&
&!-- 进行 多表关联插叙,先关联user和role --&
&collection property=&roleSet& column=&roleid& ofType=&com.jay.demo.bean.Role&&
&id property=&id& column=&ROLE_ID&/&
&result property=&name& column=&ROLE_NAME&/&
&!-- 再在role中关联role和permission --&
&collection property=&permissionSet& column=&permissionid& ofType=&com.jay.demo.bean.Permission&&
&id property=&id& column=&permission_id&/&
&result property=&name& column=&permission_name&/&
&/collection&
&/collection&
&/resultMap&
通过User来查找Role
&!-- &select id=&selectRoleByUser& parameterType=&int& resultMap=&RoleMap&&
select * from tbl_role_user user_id
&resultMap
id=&roleMap& type=&com.jay.demo.bean.User&&
&result property=&id& column=&ROLE_ID& /&
&result property=&name& column=&ROLE_NAME& /&
&/resultMap&
&resultMap id=&permissionMap& type=&com.jay.demo.bean.Permission&&
&result property=&id& column=&PERMISSION_ID& /&
&result property=&name& column=&PERMISSION_NAME& /&
&/resultMap& --&
&sql id=&select-base-01&&
u.USER_ID,
u.USER_USERNAME,
u.USER_PASSWORD,
r.ROLE_ID,
r.ROLE_NAME,
p.PERMISSION_ID,
p.PERMISSION_NAME
tbl_user as u,
tbl_role as r,
tbl_permission as p,
tbl_permission_role as pr,
tbl_role_user as ru
u.USER_ID = ru.USER_ID
r.ROLE_ID = ru.ROLE_ID
p.PERMISSION_ID = pr.PERMISSION_ID
r.ROLE_ID = pr.ROLE_ID
&select id=&findUserByUsername& parameterType=&string& resultMap=&userMap&&
&include refid=&select-base-01& /&
u.USER_USERNAME = #{username}
&!-- select * from tbl_user u, tbl_role r, tbl_role_user tu
where u.user_id = tu.user_id and r.role_id = tu.role_id
and user_username=#{username} --&
说明:详细代码和demo见附件
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致

我要回帖

更多关于 steam十大最好玩游戏 的文章

 

随机推荐