SSH整合Shiro
SSH整合Shiro
环境配置:SSH框架,Shiro框架
一、搭建SSH框架,结构如下图:
二、导入几个依赖(整合ssh与shiro的依赖):
<!--引入shiro核心依赖shiro-core-->
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-core</artifactId>
<version>1.3.2</version>
</dependency>
<!--引入shiro对web支持的依赖shiro-web-->
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-web</artifactId>
<version>1.3.2</version>
</dependency>
<!--引入shiro对spring支持的依赖shiro-spring-->
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-spring</artifactId>
<version>1.3.2</version>
</dependency>
三、创建shiro包,创建自定义relam
public class MyRealm extends AuthorizingRealm{
private IUsersBiz iusersBiz;
public IUsersBiz getIusersBiz() {
return iusersBiz;
}
public void setIusersBiz(IUsersBiz iusersBiz) {
this.iusersBiz = iusersBiz;
}
//授权
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
return null;
}
//认证
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
//获取传递过来的数据
UsernamePasswordToken usernamePasswordToken=(UsernamePasswordToken) token;
String uname=usernamePasswordToken.getUsername();
String upass=usernamePasswordToken.getPassword().toString();
System.out.println("认证:"+uname+" "+upass);
//查询数据库
List<Users> list = iusersBiz.getUsersByUsernameAndPassword(uname, upass);
String pwd=null;
if(list.size()!=0&&list!=null) {
pwd=list.get(0).getPassword();
}
//认证,把认证的结果 返回
SimpleAuthenticationInfo simpleAuthenticationInfo=new SimpleAuthenticationInfo(uname, pwd, this.getName());
//用户名不存在,返回null
//参数一:期望登陆后,保存在subject中的信息
//参数二:密码,如果返回为null,说明用户不存在
//参数三:realm名称
return simpleAuthenticationInfo;
}
}
建立MyRealm这个类之后,就继承AuthorizingRealm
重写两个方法,doGetAuthorizationInfo(授权) doGetAuthenticationInfo(认证), 先执行认证,在执行授权:
四、创建shiro的配置文件applicationContext-shiro.xml
- 配置自定义realm
<!--3. 配置自定义realm-->
<bean id="myRealm" class="com.liuyongqi.SSHShiro.shiro.MyRealm">
<property name="iusersBiz" ref="usersBizImpl"></property>
</bean>
2.配置SecurityManager
<!--2.配置SecurityManager-->
<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
<property name="realm" ref="myRealm"></property>
</bean>
3.配置shiroFilter过滤器
<!--1.配置shiroFilter过滤器-->
<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
<!--引入SecurityManager-->
<property name="securityManager" ref="securityManager"></property>
<!-- 配置登录页面 -->
<property name="loginUrl" value="/add.jsp"></property>
<!--成功页面-->
<property name="successUrl" value="/success.jsp"></property>
<!--过滤 -->
<!--
anon未认证可以访问
authc认证后可以访问
perms需要特定权限才能访问
roles需要特定角色才能访问
user需要特定用户才能访问
port需要特定端口才能访问(不常用)
rest根据指定HTTP请求才能访问(不常用)
*文件夹中的全部文件
** 文件夹中的全部文件(含子文件夹)-->
<property name="filterChainDefinitions">
<value>
/add.jsp*=anon
/success.jsp*=authc
</value>
</property>
</bean>
五、配置web.Xml
<!-- 配置shiro过滤器:必须配置到Struts2前面 -->
<!-- 加载shiro -->
<filter>
<filter-name>shiroFilter</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>shiroFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
如果出现报错,把shiro中的filter-mapping的位置放到struts2filter-mapping的位置的前面
六、创建jsp页面
七、创建action
public class LoginAction {
private Users users;
private IUsersBiz iusersBiz;
public Users getUsers() {
return users;
}
public void setUsers(Users users) {
this.users = users;
}
public IUsersBiz getIusersBiz() {
return iusersBiz;
}
public void setIusersBiz(IUsersBiz iusersBiz) {
this.iusersBiz = iusersBiz;
}
public String islogin() throws Exception{
System.out.println(users);
//通过SecurityUtils得到subject
Subject subject = SecurityUtils.getSubject();
//实例化一个令牌,把用户名和密码放入其中
UsernamePasswordToken token = new UsernamePasswordToken(users.getUsername(),users.getPassword());
try {
//会自动去MyRealm这个类中的doGetAuthenticationInfo和doGetAuthorizationInfo方法走一走,验证并授权
subject.login(token);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
return "add";
}
return "success";
}
}
配置struts.xml文件
<struts>
<package name="mya" extends="struts-default">
<global-allowed-methods>regex:.*</global-allowed-methods>
<!-- 注意:class的值不再是一个类的全栈名,而是<bean>中的id -->
<!-- 通配符 -->
<action name="*_*" class="{2}Action" method="{1}">
<result name="success" type="redirect">/success.jsp</result>
<result name="add" type="redirect">/add.jsp</result>
</action>
</package>
</struts>
八、启动tomact,测试
测试成功
测试失败:
又回到了原页面:
测试没有权限访问:
回车:
没有权限访问,回到登录页面
如果大家想浏览我的下一篇文章,请留言
版权声明:此文章属于原创,不准随意转载:https://blog.****.net/LYQ2332826438