瀏覽代碼

获取当前登录用户信息

LiTaohong 7 年之前
父節點
當前提交
462d5ce525

+ 8 - 4
app/app-iot-server/src/main/java/com/yihu/ehr/iot/security/config/EhrWebSecurityConfiguration.java

@ -1,9 +1,6 @@
package com.yihu.ehr.iot.security.config;
import com.yihu.ehr.iot.security.core.EhrWebAuthenticationProvider;
import com.yihu.ehr.iot.security.core.EhrWebAuthenticationSuccessHandler;
import com.yihu.ehr.iot.security.core.EhrWebUserDetailsService;
import com.yihu.ehr.iot.security.core.EhrWebUsernamePasswordAuthenticationFilter;
import com.yihu.ehr.iot.security.core.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
@ -33,6 +30,8 @@ public class EhrWebSecurityConfiguration extends WebSecurityConfigurerAdapter {
    private EhrWebAuthenticationProvider ehrWebAuthenticationProvider;
    @Autowired
    private EhrWebAuthenticationSuccessHandler ehrWebAuthenticationSuccessHandler;
    @Autowired
    private EhrWebAuthenticationFailureHandler ehrWebAuthenticationFailureHandler;
    //@Autowired
    //private EhrWebAccessDecisionManager ehrWebAccessDecisionManager;
    //@Autowired
@ -48,6 +47,7 @@ public class EhrWebSecurityConfiguration extends WebSecurityConfigurerAdapter {
        // ---------- 自定义Filter Start ----------
        EhrWebUsernamePasswordAuthenticationFilter ehrWebUsernamePasswordAuthenticationFilter = new EhrWebUsernamePasswordAuthenticationFilter(oauth2InnerUrl, profileInnerUrl);
        ehrWebUsernamePasswordAuthenticationFilter.setAuthenticationSuccessHandler(ehrWebAuthenticationSuccessHandler);
        ehrWebUsernamePasswordAuthenticationFilter.setAuthenticationFailureHandler(ehrWebAuthenticationFailureHandler);
        ehrWebUsernamePasswordAuthenticationFilter.setAuthenticationManager(authenticationManagerBean());
        //ehrWebUsernamePasswordAuthenticationFilter.setSessionAuthenticationStrategy(new ConcurrentSessionControlAuthenticationStrategy(sessionRegistry));
        http.addFilterBefore(ehrWebUsernamePasswordAuthenticationFilter, UsernamePasswordAuthenticationFilter.class);
@ -96,6 +96,10 @@ public class EhrWebSecurityConfiguration extends WebSecurityConfigurerAdapter {
        return new EhrWebAuthenticationSuccessHandler();
    }
    @Bean
    EhrWebAuthenticationFailureHandler ehrWebAuthenticationFailureHandler(){
        return new EhrWebAuthenticationFailureHandler();
    }
    /**
    @Bean
    EhrWebAccessDecisionManager ehrWebAccessDecisionManager() {

+ 40 - 0
app/app-iot-server/src/main/java/com/yihu/ehr/iot/security/core/EhrWebAuthenticationFailureHandler.java

@ -0,0 +1,40 @@
package com.yihu.ehr.iot.security.core;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.ehr.util.rest.Envelop;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.security.core.AuthenticationException;
import org.springframework.security.web.authentication.AuthenticationFailureHandler;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
 * Created by progr1mmer on 2018/1/26.
 */
public class EhrWebAuthenticationFailureHandler implements AuthenticationFailureHandler {
    @Autowired
    private ObjectMapper objectMapper;
    /**
     * Step 4
     * @param httpServletRequest
     * @param httpServletResponse
     * @param authException
     * @throws IOException
     * @throws ServletException
     */
    @Override
    public void onAuthenticationFailure(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, AuthenticationException authException) throws IOException, ServletException {
        Envelop envelop = new Envelop();
        envelop.setSuccessFlg(false);
        envelop.setErrorMsg("invalid account or password !");
        envelop.setErrorCode(-1);
        httpServletResponse.setContentType(MediaType.APPLICATION_JSON_UTF8_VALUE);
        httpServletResponse.getWriter().print(objectMapper.writeValueAsString(envelop));
    }
}

+ 12 - 0
app/app-iot-server/src/main/java/com/yihu/ehr/iot/security/core/EhrWebAuthenticationSuccessHandler.java

@ -1,17 +1,22 @@
package com.yihu.ehr.iot.security.core;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.ehr.agModel.user.UserDetailModel;
import com.yihu.ehr.iot.util.CurrentRequest;
import com.yihu.ehr.util.rest.Envelop;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.web.authentication.AuthenticationSuccessHandler;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
@ -21,6 +26,7 @@ public class EhrWebAuthenticationSuccessHandler implements AuthenticationSuccess
    @Autowired
    private ObjectMapper objectMapper;
    //@Autowired
    //private FindByIndexNameSessionRepository findByIndexNameSessionRepository;
@ -44,6 +50,12 @@ public class EhrWebAuthenticationSuccessHandler implements AuthenticationSuccess
        userMap.put("username", username);
        userMap.put("realName", realName);
        envelop.setObj(userMap);
        List modelList = new ArrayList<>();
        UserDetailModel userDetailModel = (UserDetailModel)httpServletRequest.getAttribute("user");
        modelList.add(userDetailModel);
        envelop.setDetailModelList(modelList);
        //Map<String, Object> sessionMap = findByIndexNameSessionRepository.findByIndexNameAndIndexValue(FindByIndexNameSessionRepository.PRINCIPAL_NAME_INDEX_NAME, "admin");
        httpServletResponse.setContentType(MediaType.APPLICATION_JSON_UTF8_VALUE);
        httpServletResponse.getWriter().print(objectMapper.writeValueAsString(envelop));

+ 1 - 0
app/app-iot-server/src/main/java/com/yihu/ehr/iot/security/core/EhrWebUserDetailsService.java

@ -66,6 +66,7 @@ public class EhrWebUserDetailsService implements UserDetailsService {
                    request.setAttribute("id", userDetailModel.getId());
                    request.setAttribute("username", username);
                    request.setAttribute("realName", userDetailModel.getRealName());
                    request.setAttribute("user",userDetailModel);
                    return new User(username, password, getGrantedAuthorities(username));
                }
                logger.error(httpResponse.getBody());

+ 51 - 0
app/app-iot-server/src/main/java/com/yihu/ehr/iot/util/CurrentRequest.java

@ -0,0 +1,51 @@
package com.yihu.ehr.iot.util;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.ehr.agModel.user.UserDetailModel;
import com.yihu.ehr.iot.util.http.HttpHelper;
import com.yihu.ehr.iot.util.http.HttpResponse;
import com.yihu.ehr.util.rest.Envelop;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
 * @author lith
 * @created 2018/02/06
 */
@Component
public class CurrentRequest {
    @Value("${service-gateway.profileInnerUrl}")
    protected String profileInnerUrl;
    @Autowired
    private ObjectMapper objectMapper;
    public static Map<String,UserDetailModel> userMap = new ConcurrentHashMap<>(1000);
    public UserDetailModel getCurrentUserByName(String username) throws IOException {
        UserDetailModel user = null;
        if(userMap.containsKey(username)){
            return userMap.get(username);
        }
        Map params = new HashMap<>();
        params.put("login_code", username);
        HttpResponse httpResponse = HttpHelper.get(profileInnerUrl + "/users/" + username, params);
        if(httpResponse.getStatusCode() == 200) {
            Envelop envelop = this.objectMapper.readValue(httpResponse.getBody(), Envelop.class);
            if (envelop.isSuccessFlg()){
                String userString = this.objectMapper.writeValueAsString(envelop.getObj());
                user = this.objectMapper.readValue(userString, UserDetailModel.class);
                userMap.put(username,user);
            }
        }
        return user;
    }
}

+ 2 - 2
app/app-iot-server/src/main/webapp/front/js/common/apiServer.js

@ -62,13 +62,13 @@ define(['jquery', 'promise', 'layer', 'jsHelper'], function ($, Promise, layer,
    var APIService = {
        indexPage: function () {//首页
            return baseUrl + 'attendance/index'
            return baseUrl + '/index'
        },
        autoLogin: function (opt) {//单点登录
            return httpPost(baseUrl + 'login', opt)
        },
        login: function(opt) {//登录
            return httpPost(baseUrl + 'login11', opt)
            return httpPost(baseUrl + 'login', opt)
        },
        out: function (opt) {//退出
            sessionStorage.clear();

+ 4 - 3
app/app-iot-server/src/main/webapp/front/js/scripts/login.js

@ -35,9 +35,10 @@ require(loginRelyOn, function ($, layer, vue, jsHelper, apiServer, Promise) {
                }).then(function (res) {
                    layer.close(load);
                    if (res.successFlg) {
                        sessionStorage.setItem("ZF_UID",res.data.user.id);
                        sessionStorage.setItem("ZF_UN",res.data.user.realName);
                        sessionStorage.setItem("ZF_U",res.data.user);
                        debugger
                        sessionStorage.setItem("ZF_UID",res.obj.id);
                        sessionStorage.setItem("ZF_UN",res.obj.realName);
                        sessionStorage.setItem("ZF_U",res.obj);
                        location.href = apiServer.indexPage();
                    } else {
                        layer.msg(res.message);

+ 2 - 2
app/app-iot-server/src/main/webapp/front/views/index.html

@ -10,8 +10,8 @@
    <meta http-equiv="refresh" content="0;ie.html" />
    <![endif]-->
    <title>卫生应急指挥平台</title>
    <link href="../css/bootstrap.min14ed.css?v=3.3.6" rel="stylesheet">
    <link href="../css/index.css" rel="stylesheet">
    <link href="/iot/front/css/bootstrap.min14ed.css?v=3.3.6" rel="stylesheet">
    <link href="/iot/front/css/index.css" rel="stylesheet">
    <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=mHjQLONxGpRtrZHZkxr9t3cD3n0HupQ0"></script>
</head>
<body>