如何shiro中shiro getprincipall 属性的属性

最近在重构,有空学了一个简单的安全框架shiro,资料比较少,在百度和google上能搜到的中文我看过了,剩下的时间有空会研究下官网的文章和查看下源码,
简单的分享一些学习过程;
1,简单的一些概念上的认知
2,使用认证的基本流程
3,shiro集成spring完成简单的认证流程,已实现
建一个maven的web项目,引入依赖
&&springmvc的的依赖
& & & &dependency&
&&&&&&&&&&& &groupId&org.springframework&/groupId&
&&&&&&&&&&& &artifactId&spring-webmvc&/artifactId&
&&&&&&&&&&& &version&3.2.0.RELEASE&/version&
&&&&&&& &/dependency&shiro跟spring集成的插件
&&dependency&
&&&&&&&&&&& &groupId&org.apache.shiro&/groupId&
&&&&&&&&&&& &artifactId&shiro-spring&/artifactId&
&&&&&&&&&&& &version&1.2.3&/version&
&&&&&&& &/dependency&
配置web.xml指出spring容器的配置文件位置
&context-param&
&&&&&&& &param-name&contextConfigLocation&/param-name&
&&&&&&& &param-value&classpath*:context_config.xml&/param-value&
&&& &/context-param&指出spring在web容器中的代号
&&& &context-param&
&&&&&&& &param-name&webAppRootKey&/param-name&
&&&&&&& &param-value&wechatSystem&/param-value&
&&& &/context-param&初始化spring的容器
&&& &listener&
&&&&&&& &listener-class&org.springframework.web.context.ContextLoaderListener&/listener-class&
&&& &/listener&spring mvc的分发器
&&& &servlet&
&&&&&&&&& &servlet-name&admin&/servlet-name&
&&&&&&&&& &servlet-class&org.springframework.web.servlet.DispatcherServlet&/servlet-class&
&&&&&&& &init-param&
&&&&&&&&&&& &param-name&contextConfigLocation&/param-name&
&&&&&&&&&&& &param-value&classpath*:admin-dispatcher-servlet.xml&/param-value&
&&&&&&& &/init-param&
&&&&&&& &load-on-startup&1&/load-on-startup&
&&&& &/servlet&
&&&& &servlet-mapping&
&&&&&&&&& &servlet-name&admin&/servlet-name&
&&&&&&&&& &url-pattern&/&/url-pattern&
&&&& &/servlet-mapping&spring跟shiro集成的过滤代理
&&&&&&& &filter-name&shiroFilter&/filter-name&
&&&&&&& &filter-class&org.springframework.web.filter.DelegatingFilterProxy&/filter-class&
&&&&&&& &init-param&
&&&&&&&&&&& &param-name&targetFilterLifecycle&/param-name&
&&&&&&&&&&& &param-value&true&/param-value&
&&&&&&& &/init-param&
&&& &/filter&
&&& &filter-mapping&
&&&&&&& &filter-name&shiroFilter&/filter-name&
&&&&&&& &url-pattern&/admin/*&/url-pattern&
&&& &/filter-mapping&
&&& &!-- 字符过滤,保存中文的时候用到 --&
&&& &filter&
&&&&&&& &filter-name&characterEncoding&/filter-name&
&&&&&&& &filter-class&org.springframework.web.filter.CharacterEncodingFilter&/filter-class&
&&&&&&& &init-param&
&&&&&&&&&&& &param-name&encoding&/param-name&
&&&&&&&&&&& &param-value&UTF-8&/param-value&
&&&&&&& &/init-param&
&&&&&&& &init-param&
&&&&&&&&&&& &param-name&forceEncoding&/param-name&
&&&&&&&&&&& &param-value&true&/param-value&
&&&&&&& &/init-param&
&&& &/filter&
&&& &filter-mapping&
&&&&&&& &filter-name&characterEncoding&/filter-name&
&&&&&&& &url-pattern&/*&/url-pattern&
&&& &/filter-mapping&
配置shiroFilter实例
&&!--shiro的配置,关键两点,配置SecurityManager和依赖的RealM--&
&&& &bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean"&
&&&&&&& &property name="securityManager" ref="securityManager" /&
&&&&&&& &property name="loginUrl" value="/admin/login" /&
&&&&&&& &property name="successUrl" value="/admin/home" /&
&&&&&&& &property name="unauthorizedUrl" value="/admin/login" /&
&&&&&&& &property name="filters"&
&&&&&&&&&&& &map&
&&&&&&&&&&&&&&& &entry key="anno" value-ref="anno"/&
&&&&&&&&&&&&&&& &entry key="authc" value-ref="authc"/&
&&&&&&&&&&& &/map&
&&&&&&& &/property&
&&&&&&& &property name="filterChainDefinitionMap"&
&&&&&&&&&&& &map&
&&&&&&&&&&&&&&& &entry key="anon" value="anon"/&
&&&&&&&&&&&&&&& &entry key="authc" value="authc"/&
&&&&&&&&&&& &/map&
&&&&&&& &/property&
&&&&&&& &property name="filterChainDefinitions"&
&&&&&&&&&&& &value&
&&&&&&&&&&&&&&& /admin/login=anon
&&&&&&&&&&&&&&& /admin/validCode=anon
&&&&&&&&&&&&&&& /user/**=authc
&&&&&&&&&&&&&&& /role/**=authc
&&&&&&&&&&&&&&& /permission/**=authc
&&&&&&&&&&&&&&& /**=authc
&&&&&&&&&&& &/value&
&&&&&&& &/property&
&&& &/bean&
&&& &bean id="authc" class="com.util.filter.MyAccessFilter"/&
&&& &bean id="anno" class="org.apache.shiro.web.filter.authc.AnonymousFilter"/&
&&&&&bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager"&
&&&&&&& &property name="realm" ref="myRealm"/&
&&& &/bean&
&&&&&bean id="myRealm" class="com.util.MysqlJdbcRealM"/&
开发跟shiro交互的RealM,一般把权限信息放到db中
package com.
import com.domain.U
import com.domain.UserD
import mon.base.S
import com.service.UserDtoS
import com.service.UserS
import org.apache.shiro.authc.*;
import org.apache.shiro.authz.AuthorizationI
import org.apache.shiro.authz.SimpleAuthorizationI
import org.apache.shiro.realm.jdbc.JdbcR
import org.apache.shiro.subject.PrincipalC
import org.springframework.beans.factory.annotation.A
import org.
import javax.annotation.R
* User: cutter.li
* Time: 15:24
* 备注: 自定义的mysql数据源
@Component
public class MysqlJdbcRealM extends JdbcRealm {
&&& @Resource
&&& private UserService userS
&&& //登录认证
&&& @Override
&&& protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
&&&&&&& UsernamePasswordToken usernamePasswordToken = (UsernamePasswordToken)
&&&&&&& String username = String.valueOf(usernamePasswordToken.getUsername());
&&&&&&& User user = userService.findByUserName(username);
&&&&&&& AuthenticationInfo authenticationInfo =
&&&&&&& if (null != user) {
&&&&&&&&&&& String password = new String(usernamePasswordToken.getPassword());
&&&&&&&&&&& if (password.equals(user.getPassword())) {
&&&&&&&&&&&&&&& authenticationInfo = new SimpleAuthenticationInfo(user.getUsername(), user.getPassword(), getName());
&&&&&&&&&&& }
&&&&&&& return authenticationI
&&& //授权
&&& @Override
&&& protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
&&&&&&& String username = (String) principals.getPrimaryPrincipal();
&&&&&&& if (!Strings.isNullOrEmpty(username)) {
&&&&&&&&&&& SimpleAuthorizationInfo authenticationInfo = new SimpleAuthorizationInfo();
&&&&&&&&&&& authenticationInfo.setRoles(userService.findRolesStr(username));
&&&&&&&&&&& authenticationInfo.setStringPermissions(userService.findPermissionsStr(username));
&&&&&&&&&&& return authenticationI
简单的登录页面,功能测试
controller的实现:
&@RequestMapping(value = "login", method = RequestMethod.POST)
&&& public ResponseEntity&Message& loginSubmit(String username, String password, String vcode, HttpServletRequest request) {
&&&&&&& message.setSuccess();
&&&&&&& validateLogin(message, username, password, vcode);
&&&&&&& try {
//&&&&&&&&&&& String code = request.getSession().getAttribute(AppConstant.KAPTCHA_SESSION_KEY).toString();
//&&&&&&&&&&& if (!vcode.equalsIgnoreCase(code)) {
//&&&&&&&&&&&&&&& message.setCode(AppConstant.VALIDCODE_ERROR);
//&&&&&&&&&&&&&&& message.setMsg("验证码错误");
//&&&&&&&&&&& }
&&&&&&&&&&& if (message.isSuccess()) {
&&&&&&&&&&&&&&& Subject subject = SecurityUtils.getSubject();
&&&&&&&&&&&&&&& subject.login(new UsernamePasswordToken(username, password));
&&&&&&&&&&&&&&& if (subject.isAuthenticated()) {
&&&&&&&&&&&&&&&&&&&&&&& message.setMsg("登录成功");
&&&&&&&&&&&&&&& } else {
&&&&&&&&&&&&&&&&&&& message.setCode(AppConstant.USERNAME_NOTEXIST);
&&&&&&&&&&&&&&&&&&& message.setMsg("用户名/密码错误");
&&&&&&&&&&&&&&& }
&&&&&&&&&&& }
&&&&&&& }catch (AuthenticationException ex){
&&&&&&&&&&& message.setCode(AppConstant.USERNAME_NOTEXIST);
&&&&&&&&&&& message.setMsg("用户名/密码错误");
&&&&&&&&&&& ex.printStackTrace();
&&&&&&& finally {
&&&&&&&&&&& return new ResponseEntity&Message&(message, HttpStatus.OK);
指定认证的策略和多数据源
& & &!--shiro的配置--&
&&& &bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean"&
&&&&&&& &property name="securityManager" ref="securityManager" /&
&&&&&&& &property name="loginUrl" value="/admin/login" /&
&&&&&&& &property name="successUrl" value="/admin/home" /&
&&&&&&& &property name="unauthorizedUrl" value="/admin/login" /&
&&&&&&& &property name="filters"&
&&&&&&&&&&& &map&
&&&&&&&&&&&&&&& &entry key="anno" value-ref="anno"/&
&&&&&&&&&&&&&&& &entry key="authc" value-ref="authc"/&
&&&&&&&&&&& &/map&
&&&&&&& &/property&
&&&&&&& &property name="filterChainDefinitionMap"&
&&&&&&&&&&& &map&
&&&&&&&&&&&&&&& &entry key="anon" value="anon"/&
&&&&&&&&&&&&&&& &entry key="authc" value="authc"/&
&&&&&&&&&&& &/map&
&&&&&&& &/property&
&&&&&&& &property name="filterChainDefinitions"&
&&&&&&&&&&& &value&
&&&&&&&&&&&&&&& /admin/login=anon
&&&&&&&&&&&&&&& /admin/validCode=anon
&&&&&&&&&&&&&&& /user/**=authc
&&&&&&&&&&&&&&& /role/**=authc
&&&&&&&&&&&&&&& /permission/**=authc
&&&&&&&&&&&&&&& /**=authc
&&&&&&&&&&& &/value&
&&&&&&& &/property&
&&& &/bean&
&&& &bean id="authc" class="com.util.filter.MyAccessFilter"/&
&&& &bean id="anno" class="org.apache.shiro.web.filter.authc.AnonymousFilter"/&
&&& &bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager"&
&&&&&&& &property name="authenticator" ref="modelAuthricator"/&
&&& &/bean&
&&& &bean id="modelAuthricator" class="org.apache.shiro.authc.pam.ModularRealmAuthenticator"&
&&&&&&& &property name="authenticationStrategy" ref="firstSuccess"/&
&&&&&&& &property name="realms"&
&&&&&&&&&& &list&
&&&&&&&&&&&& &ref local="myRealm"/&
&&&&&&&&&& &/list&
&&&&&&& &/property&
&&& &/bean&
&&& &bean id="firstSuccess" class="org.apache.shiro.authc.pam.FirstSuccessfulStrategy"/&
&&& &bean id="myRealm" class="com.util.MysqlJdbcRealM"/&
阅读(...) 评论()安全检查中...
请打开浏览器的javascript,然后刷新浏览器
< 浏览器安全检查中...
还剩 5 秒&

我要回帖

更多关于 shiro getprincipal 的文章

 

随机推荐