<!--配置过滤器,用于整合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框架的过滤器工厂bean -->
<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
<property name="securityManager" ref="securityManager"/>
<property name="loginUrl" value="/index.jsp"/>
<property name="successUrl" value=""/>
<property name="unauthorizedUrl" value="/noPrivilegeUI.jsp"/>
<!-- 指定URL级别拦截策略 -->
<property name="filterChainDefinitions">
<value>
/script/** = anon
/style/** = anon
/index.jsp* = anon
/noPrivilegeUI.jsp* = anon
/user/login = anon
/role/findAllRoleList = perms["角色管理"]
/** = authc
</value>
</property>
</bean>
<!-- 配置安全管理器 --> <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager"/>
/**
* 登录
*/
@RequestMapping("/login")
public String login(User user, HttpServletRequest request, Model model){
HttpSession session = request.getSession();
User newUser = userService.login(user);
if(newUser != null){
session.setAttribute("loginUser",newUser);
return "home/home";
}
model.addAttribute("errorMessage","用户名或者密码不正确!");
return "forward:/index.jsp";
}
/**
* 使用Shiro框架提供的方式进行认证登录
*/
@RequestMapping("/login")
public String login(User user, HttpServletRequest request, Model model){
HttpSession session = request.getSession();
//使用Shiro框架提供的方式进行认证
Subject subject = SecurityUtils.getSubject(); //获得当前登录用户对象,现在状态为 “未认证”
//用户名密码令牌
AuthenticationToken token = new UsernamePasswordToken(user.getLoginName(), MD5Utils.md5(user.getPassword()));
try{
subject.login(token); //执行你自定义的Realm
User user1 = (User) subject.getPrincipal();
session.setAttribute("loginUser",user1);
return "home/home";
}catch(UnknownAccountException e){
e.printStackTrace();
model.addAttribute("errorMessage","此用户名不存在!");
}catch(IncorrectCredentialsException e){
e.printStackTrace();
model.addAttribute("errorMessage","密码不正确!");
}catch(Exception e){
e.printStackTrace();
}
return "forward:/index.jsp";
}
public class UserRealm extends AuthorizingRealm{
@Autowired
private UserDao userDao;
//认证方法
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
System.out.println("realm中的认证方法执行了。。。。");
UsernamePasswordToken myToken = (UsernamePasswordToken) token;
String loginName = myToken.getUsername();
//根据用户名查询数据库中的用户,这个方法是自己写的
User user = userDao.findUserByLoginName(loginName);
if(user == null){
//用户名不存在
return null;
}
//如果能查询到,再由框架比对数据库中查询到的密码和页面提交的密码是否一致
AuthenticationInfo info = new SimpleAuthenticationInfo(user, user.getPassword(), this.getName());
return info;
}
//授权方法
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
return null;
}
}
<!-- 配置安全管理器 -->
<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
<!-- 注入realm -->
<property name="realm" ref="userRealm"/>
</bean>
<!-- 注册自定义realm -->
<bean id="userRealm" class="com.demo.privilege.service.realm.UserRealm"/>
//授权方法
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals){
SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
User user = (User) principals.getPrimaryPrincipal();
for (Role role : user.getRoles()){
for (Privilege privilege : role.getPrivileges()){
info.addStringPermission(privilege.getName());
}
}
return info;
}
<!-- 保证实现了Shiro内部lifecycle函数的bean执行 -->
<bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor"/>
<!-- 开启shiro框架注解支持 -->
<!-- 自动代理 -->
<bean id="defaultAdvisorAutoProxyCreator" class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator" depends-on="lifecycleBeanPostProcessor">
<!-- value必须设置为true使用cglib方式为对象创建代理对象,
默认为false,设为false,就是使用JDK方式为对象创建代理对象,程序会出错 -->
<property name="proxyTargetClass" value="true"/>
</bean>
<!-- 配置shiro框架提供的切面类,用于创建代理对象 -->
<bean class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor"/>
/**
* 查询岗位列表
*/
@RequiresPermissions("角色列表") //执行这个方法必须有角色列表这个权限
@RequestMapping("/findAllRoleList")
public String findAllRoleList(Model model){
List<Role> roleList = roleService.findAllRoleList();
model.addAttribute("roleList",roleList);
return "role/list";
}
@RequiresRoles("aRoleName");
void someMethod();
@RequiresPermissions( {"file:read", "write:aFile.txt"} )
void someMethod();
<!-- 全局异常处理 -->
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="exceptionMappings">
<props>
<prop key="org.apache.shiro.authz.UnauthorizedException">redirect:/noPrivilegeUI.jsp</prop>
</props>
</property>
</bean>
<%@ taglib uri="http://shiro.apache.org/tags" prefix="shiro"%>
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有