what is ${#authorization} in thymeleaf when using spring security - spring-security

${#authentication} is Authentication.java, and you can see that from source code if you print it. However tring to print ${#authorization} throws an java.lang.Stackoverflow error. And Authorization.java does not have an expression() method, even though ${#authorization.expression('hasRole(''ROLE_ADMIN'')')} works. So what is ${#authorization}?

I'm using thymeleaf-extras-springsecurity4 integrated with Spring Security 4. ${#authorization} is an instance of org.thymeleaf.extras.springsecurity4.auth.Authorization.
For example:
<div th:text="${#authorization}"></div>
Prints:
org.thymeleaf.extras.springsecurity4.auth.Authorization#61ee2eca
The class has an expression method, please see here.
But the method is also available in thymeleaf-extras-springsecurity3. See here. The utility objects (authentication and authorization) are documented here.
Hope that helps!

Related

applying MSDDetector in colab

I have trouble writing the MSD detector correctly. However, it has no attribute ''create''.
I wrote the following code. But my session crashed for an unknown reason.
msd=cv2.xfeatures2d.MSDDetector()
kps1=msd.detect(I1)
I will appreciate any help.
unfortunately, you've found a bug here.
there should be a ´XXX_create()´ function, but someone forgot to expose it to the python api, by adding a CV_WRAP to the function signature here
(and no, you cannot use the 'ordinary' constructor, it does not produce a valid instance (will segfault, if you call any method on it !!))
please raise an issue here
if you're able to build from src, try to fix it locally, by changing that line to:
CV_WRAP static Ptr<MSDDetector> create(....

#ActiveProfiles in Spring Test does not support placeholders any longer

I am upgrading from Spring 4.3 to Spring 5.3 and it seems that placeholders are no longer supported for the #ActiveProviles annotation.
The following code worked with the old Spring version:
#RunWith(SpringRunner.class)
#SpringBootTest
#ActiveProfiles({"${profileA}","someProfileWithoutPlaceholders"})
#ContextConfiguration(classes = MyApplication.class)
public class MyTest {...}
But it stopped working with the upgrade and now it get
Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'nucleus.hibernate.dialect' in value "${nucleus.hibernate.dialect}"
at org.springframework.util.PropertyPlaceholderHelper.parseStringValue(PropertyPlaceholderHelper.java:178)
at org.springframework.util.PropertyPlaceholderHelper.replacePlaceholders(PropertyPlaceholderHelper.java:124)
at org.springframework.core.env.AbstractPropertyResolver.doResolvePlaceholders(AbstractPropertyResolver.java:239)
at org.springframework.core.env.AbstractPropertyResolver.resolveRequiredPlaceholders(AbstractPropertyResolver.java:210)
at org.springframework.context.support.PropertySourcesPlaceholderConfigurer.lambda$processProperties$0(PropertySourcesPlaceholderConfigurer.java:175)
at org.springframework.beans.factory.support.AbstractBeanFactory.resolveEmbeddedValue(AbstractBeanFactory.java:936)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1321)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1300)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:640)
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:399)
... 55 more
Note, that 'nucleus.hibernate.dialect' is defined in the application properties referenced by "${profileA}".
As a workaround, I tried to specify the properties as test property source explicitly using
#TestPropertySource(locations={"classpath:/application-${profileA}.properties"}})
and that works.
I am not sure if using placeholders for selecting a Spring profile on a Spring integration test is an officially supported feature. If yes, I consider this a breaking change in the Spring test framework.
After debugging around the test case I got a bit more insight on this issue.
It seems that in
org.springframework.core.env.PropertySourcesPropertyResolver#getProperty(java.lang.String, java.lang.Class<T>, boolean)
the test property source 'test' splits up the profiles and has two entries:
spring.profiles.active[0] -> "${profileA}
spring.profiles.active[1] -> "someProfileWithoutPlaceholders"
So when looking up with key "spring.profiles.active", it does not find any value, and org.springframework.core.env.AbstractPropertyResolver#resolveNestedPlaceholders is not called.
This is done in org.springframework.core.env.AbstractEnvironment#doGetActiveProfiles when building the test application context..
In the old Spring version, there was only one map entry:
spring.profiles.active -> "${profileA},someProfileWithoutPlaceholders"
so it found the entry and resolved the placeholder.

Possibly Bug in Websharper Zafir-Libraries (Beta)

I'm trying to create a Sitelet with SiteletBuilder in C#:
return WebSharper.Sitelets.Content.Page(...)
However, the class Websharper.Sitelet contains Content both as Struct and Class.
So, this does not compile.
Versions of Zafir-Libraries are
Zafir 4.0.152.29-beta5
Zafir.CSharp 4.0.152.29-beta5
Zafir.Html 4.0.56.95-beta5
Zafir.UI.Next 4.0.102.33-beta5
How to reference WebSharper.Sitelets.Content proberly?
Or is this indeed a bug?
Thanks for the report, created ticket: https://github.com/intellifactory/websharper/issues/645
I have been testing with having using WebSharper.Sitelets; and then using with shorter form Content.Page(...). C# can resolve this for some reason, although the name conflict indeed exists in WebSharper.Sitelets.dll

AngularJS with .NET MVC Bundling Minification Error

I have been developing a large AngularJS application inside of a .NET MVC Website. I've gone way to long without testing if it will sucesfully minifiy using the Bundle Optimiazation Features?
BundleTable.EnableOptimizations = True
And of Course, it fails. I've been playing with the Order I bundle my scripts, and ensuring I am using String Literals for my Controller Names (I wasn't, and that is a lot of re-factoring that I will have to do).
But I can not get my Core Scripts to Minifiy without the angular "Unknown Provider" error.
Here is the exact Error:
Uncaught Error: [$injector:modulerr] [http://errors.angularjs.org/1.3.14/$injector/modulerr?p0=ppAccount&p1=Error…redScripts%3Fv%3DknV3wkCOg32ajaw4GwiRSrTXdo8Ue7MRIn65CPYa1b81%3A1%3A379851)]1
Here is my bundle config that is failing:
bundles.Add(new ScriptBundle("~/bundles/PilotPartnerRequiredScripts")
.Include(
"~/UI/js/jquery/jquery-2.1.3.js",
"~/UI/js/plugins/jquery-ui/jquery-ui.js",
"~/UI/js/bootstrap/bootstrap.js",
"~/UI/js/plugins/pace/pace.min.js",
"~/UI/js/plugins/slimscroll/jquery.slimscroll.js",
"~/UI/js/inspinia.js",
"~/UI/js/angular/angular.js",
"~/UI/js/ui-router/angular-ui-router.js",
"~/UI/js/bootstrap/ui-bootstrap-tpls-0.12.1.js",
"~/UI/js/angular/angular-resource.js",
"~/UI/js/angular/angular-sanitize.js",
"~/UI/js/angular/angular-route.js",
"~/UI/js/plugins/switchery/switchery.js",
"~/UI/js/plugins/angular-ui-switch/angular-ui-switch.js",
"~/UI/js/plugins/angularLocalStorage/angular-local-storage.js",
"~/UI/js/plugins/ngDialog/ngDialog.js",
"~/Scripts/ngTags/ng-tags-input.js",
"~/Scripts/uiSortable/sortable.js",
"~/Scripts/kendo/2014.3.1119/kendo.all.min.js",
"~/Scripts/xeditable/xeditable.js"
For the life of me, I can't figure out which dependency isn't being resolved. I feel that if I can narrow it down to a specific dependency I know I can solve the issue.
Is there any way to track down the specific Module that is causing the issue?
Any suggestions on how to make this work?
Thank you for your help.
You should always follow strict di while injecting dependency (Array notation)
Angualar Doc has mentioned that, Do follow strict DI while doing minification, otherwise it could break you app
Eg.(Code)
angular.module('myModule', [])
.factory('serviceId', ['depService', function(depService) {
// ...
}])
.directive('directiveName', ['depService', function(depService) {
// ...
}])
.filter('filterName', ['depService', function(depService) {
// ...
}]);
In above snippet I followed inline array notation of DI, it has been applied on various angular component just to demonstrate it. You should make sure that you follow it wherever you're injecting dependency.

java.io.InvalidObjectException with JMX MXBean with CompositeData

I am trying to publish an MXBean to JMX but I am getting the following stack when I start the program and the bean is being published:
Caused by: java.io.InvalidObjectException: Do not know how to make a javax.management.openmbean.CompositeType from a CompositeData: no method from(CompositeData); no constructor has #ConstructorProperties annotation; does not have a public no-arg constructor; not an interface
at com.sun.jmx.mbeanserver.OpenConverter.invalidObjectException(OpenConverter.java:1403)
at com.sun.jmx.mbeanserver.OpenConverter$CompositeConverter.makeCompositeBuilder(OpenConverter.java:891)
at com.sun.jmx.mbeanserver.OpenConverter$CompositeConverter.checkReconstructible(OpenConverter.java:897)
at com.sun.jmx.mbeanserver.OpenConverter$CompositeBuilderCheckGetters.applicable(OpenConverter.java:1034)
at com.sun.jmx.mbeanserver.OpenConverter$CompositeConverter.makeCompositeBuilder(OpenConverter.java:868)
... 48 more
Now I now that MXBeans are only supposed use OpenMbean types as per the documentation but my class is only using java.lang.String and javax.management.openmbean.CompositeData, so I do not know why it is failing. The interface is:
import javax.management.MXBean;
import javax.management.openmbean.CompositeData;
#MXBean
public interface JmxAdministrationApi {
String synchronize(CompositeData clientInfo);
}
It is worth noting that the bean was being published correctly until I added the CompositeData parameter (i.e. with no parameters), and only then did this error occur.
Any help with this would be greatly appreciated.
Thanks in advance,
Rob
Edit: also, we are using Spring JMX
You shouldn't be using CompositeData directly even though the documentation sounds like you should. The MXBean will take care of converting a proprietary data type into a CompositeData instance and back automatically.
Take a look at the samples provided in the documentation to see how you should use #ConstructorProperties annotation to make your data type play nicely with composite data and MXBeans.
-JB-

Resources